走出迷阵-白与黑
作者:互联网
【问题描述】
已知迷阵只有一个入口,师徒在整点出发,即最初节点全部为黑色。假设每个节点均会延伸出两条支路,节点为黑色时,向左前进;节点为白色时,向右前进,直到出口处结束。当节点处有人经过,节点颜色由黑变白或者由白变黑。迷阵共有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