那幺我们在搜寻一个树的时候 , 从一个节点开始 , 能首先获取的是它的两个子节点 。例如:“ A B C D E F G”A是第一个访问的 , 然后顺序是B和D、然后是E 。然后再是C、F、G 。那幺我们怎幺来保证这个顺序呢? 这里就应该用堆叠的结构 , 因为堆叠是一个先进后出的顺序 。通过使用C++的STL , 下面的程式能帮助理解:“ const int TREE_SIZE = 9; std::stack<node*> visited, unvisited; node nodes[TREE_SIZE]; node* current; for( int i=0; i<TREE_SIZE; i++) //初始化树 { nodes[i].self = i; int child = i*2+1; if( child<TREE_SIZE ) //Left child nodes[i].left = &nodes[child]; else nodes[i].left = NULL; child++; if( child<TREE_SIZE ) //Right child nodes[i].right = &nodes[child]; else nodes[i].right = NULL; } unvisited.push(&nodes[0]); //先把0放入UNVISITED stack while(!unvisited.empty()) //只有UNVISITED不空 { current=(unvisited.top()); //当前应该访问的 unvisited.pop(); if(current->right!=NULL) unvisited.push(current->right); // 把右边压入 因为右边的访问次序是在左边之后 if(current->left!=NULL) unvisited.push(current->left); visited.push(current); cout<<current->self<<endl; }”举例这道题来举例(迷宫)1111010101010111记录起点为(1,1)找到所有的到(4,4)的路径.pascal程式如下:constb:array[1..4,1..4]of integer=((1,1,1,1),(0,1,0,1),(0,1,0,1),(0,1,1,1));c:array[1..4,1..2]of -1..1=((0,1),(0,-1),(1,0),(-1,0));vara:array[1..16,1..2]of integer;procedure print;vari,j:integer;beginfor i:=1 to 4 dobeginfor j:=1 to 4 dowrite(b[i,j]:3);writeln;end;writeln('--------------');end;procedure try(k:integer);vari:integer;beginif (a[k,1]=4)and(a[k,2]=4) thenbeginprint;exit;end;for i:=1 to 4 dobegina[k+1,1]:=a[k,1]+c[i,1];a[k+1,2]:=a[k,2]+c[i,2];if (a[k+1,1]>=1) and (a[k+1,1]<=4 )and (a[k+1,2]>=1) and (a[k+1,2]<=4) and(b[a[k+1,1],a[k+1,2]]=1) thenbeginb[a[k+1,1],a[k+1,2]]:=2;try(k+1);b[a[k+1,1],a[k+1,2]]:=1;end;end;end;begina[1,1]:=1;a[1,2]:=1;b[1,1]:=2;try(1);end.
- 深度空间网路
- 深度入侵
- 深度旅游达人
- 深度管理:突破管理困境的25条黄金法则
- 深度一键还原5.0
- 深度撞击空间探测器
- 富士山下歌词恐怖分析 深度解读富士山下歌词
- 浙江深度光电科技有限公司
- 防水深度3巴是多少米
- 手机深度清理怎么清理