其他分享
首页 > 其他分享> > 走出迷阵-白与黑

走出迷阵-白与黑

作者:互联网

【问题描述】

  已知迷阵只有一个入口,师徒在整点出发,即最初节点全部为黑色。假设每个节点均会延伸出两条支路,节点为黑色时,向左前进;节点为白色时,向右前进,直到出口处结束。当节点处有人经过,节点颜色由黑变白或者由白变黑。迷阵共有n层,所有出口位置均处于第n层,所有节点从上到下从左到右的编号为1,2,4..... ..(2^D-1)若分五次出发,请给出每个人的出口位置的节点编号。(D表示迷阵的最大层数)

输入: 一个整数n,表示迷阵的层次数(1<=n<=10)。

输出: 5个整数,分别表示每个人的出口位置。

【样例输入】 4

【样例输出】 8 12 10 14 9

#include<iostream>
using namespace std;

int main(){
    int n; // 洞穴的层次。
    int node; // 起始节点的编号。
    int tree[1025]={}; // 定义数组并初始化为0表示节点颜色都为黑(0:黑;1: 白)。 
    cin>>n;
    // 5个人出洞穴的情况模拟。 
    for(int i=1; i<=5; i++){
        node=1;
        for(int j=1; j<n; j++){
            if(tree[node]==0){ // 节点为黑,则向左走(遍历左子树),该节点变白。 
                tree[node]=1;
                node=2*node; // 左子树的节点编号等于父节点的2倍。 
            }else{ // 如果节点为白色,则向右走(遍历右子树),该节点变黑。 
                tree[node]=0;
                node=2*node+1; // 左子树的节点编号等于父节点的2倍加1。 
            } 
        }
        // 输出叶子节点。
        cout<<node<<" ";  
    } 
    return 0;
} 

 

标签:每个,走出,样例,int,迷阵,编号,节点
来源: https://www.cnblogs.com/dks0313/p/16519484.html