正在加载图片...
例2: Hanoi问题:设有三座塔,依次命名为X、 有n个直径不相同的圆盘,由小到大依 数据结构 次编号为1,2,3,…n,开始时,它们前部按 大小递减的顺序插在塔座X上,现在要求把n个 圆盘按大小递减的顺序放在塔座Z上。其移动规 则如下: 1、每次只能移动一个圆盘; 2、圆盘可以放在任一个塔座上; 栈和队列 任何时刻不能将大圆盘压在小圆盘上 19 int count=0: s void hanoi(int n, char x,char y, char z)t 据 if (n==1) move(x, 1, z); 构 else hanoi(n-1,x,zy);/递归调用* move(x,n,z);/将x上编号为n的盘放到z上* hanoi(n-1,y, x, z); a void move(char x, int n, char z)( printf(%d: move disk %d from %c to %c\n",++count, n, x, Z); return;10 数 据 结 构 之 栈 和 队 列 19 ¾ 例2:Hanoi问题:设有三座塔,依次命名为X、 Y、Z,有n个直径不相同的圆盘,由小到大依 次编号为1,2,3,….n,开始时,它们前部按 大小递减的顺序插在塔座X上,现在要求把n个 圆盘按大小递减的顺序放在塔座Z上。其移动规 则如下: 1、每次只能移动一个圆盘; 2、圆盘可以放在任一个塔座上; 3、任何时刻不能将大圆盘压在小圆盘上; 1 2 3 1 2 3 X Y Z X Y Z 数 据 结 构 之 栈 和 队 列 20 int count=0; void hanoi(int n,char x,char y, char z) { if(n == 1) move(x,1,z); else{ hanoi(n-1,x,z,y); /*递归调用*/ move(x,n,z); /*将x上编号为n的盘放到z上*/ hanoi(n-1,y,x,z); } } void move(char x, int n, char z) { printf(“%d: move disk %d from %c to %c\n”,++count, n,x,z); return; }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有