首页 > 代码库 > Tower of Hanoi问题
Tower of Hanoi问题
【问题描述】
有A, B, C三个塔座,A上套有n个直径不同的圆
盘,按直径从小到大叠放,形如宝塔,编号1, 2, 3 … n。
要求将n个圆盘从A移到C,叠放顺序不变,移动过程中遵循
下列原则:
w每次只能移一个圆盘
w圆盘可在三个塔座上任意移动
w任何时刻,每个塔座上不能将大盘压到小盘上
【解决方法】
n=1时,直接把圆盘从A移到C
n>1时,先把上面n-1个圆盘从A移到B,然后将n号盘从A移到C,再将n-1个盘从B移到C。即把求解n个圆盘的Hanoi问题转化为求解n-1个圆盘的Hanoi问题,依次类推,直至转化成只有一个圆盘的Hanoi问题
1 main( ) 2 { 3 int m; 4 printf("Input number of disks”); 5 scanf("%d",&m); 6 printf(”Steps : %3d disks”,m); 7 hanoi(m,‘A‘,‘B‘,‘C‘); 8 } 9 void hanoi(int n, char x, char y, char z) //x上的n个圆盘移到z上,y做辅助。10 {11 if(n= =1)12 move(1, x, z);//1号盘从x移到Z13 else14 {15 hanoi(n-1, x, z, y);//n-1个从 x 到 y, z 辅助16 move(n, x, z);//n号盘从 x 移到 z17 hanoi(n-1,y, x, z);//n-1个从 y 到z, x 辅助18 }19 }
Tower of Hanoi问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。