关于C语言汉诺塔问题,当程序执行到001、002、003步时,不知道具体是个什么步骤,求大神解惑!
关于C语言汉诺塔问题,当程序执行到001、002、003步时,不知道具体是个什么步骤,求大神解惑!
狼首破vtb8452016.06.12浏览17次其他分享举报
#include<stdio.h>intmain(){/*对hanoi函数的声明*/voidhanoi(intn,charone,chartwo,charthree);intm;printf("inputthenumberofdiskes:");scanf("%d",&m);printf("Thesteptomove%ddis... #include <stdio.h>
int main()
{
/*对 hanoi 函数的声明*/
voidhanoi(int n, char one, char two, char three);
intm;
printf ("input the number of diskes:");
scanf ("%d", &m);
printf ("The step to move %d diskes:\n", m);
hanoi(m, 'A', 'B', 'C');
}
/*定义 hanoi 函数*/
void hanoi(int n, char one, char two, char three)
{
/*对 move 函数的声明*/
voidmove(char x, char y);
if (n == 1)
{
move(one, three);
}
else
{
hanoi(n - 1, one, three, two);//001步
move(one, three);//002步
hanoi(n - 1, two, one, three);//003步
}
}
/*定义 move 函数*/
void move(char x, char y)
{
printf("%c-->%c\n", x, y);
} 展开
1个回答
满意答案
第一步是,将n-1个盘子从柱子A移动到柱子C,通过柱子B。
第二步就是将最后1个盘子从A移动到C。
第三步就是将在B上的盘子,通过A移动到C。
举个例子:A,B,C三根柱子,A柱子从下至上编号1,2,3的盘子
那么第一步就是将上2,3两个个盘子移动到B:那就是将3移动到C,将2移动到B,将3移动到B。
第二步就是将3移动到C。
第三步就是将2,3两个盘子移动到C:将3移动到A,将2移动到C,将3移动到C。
第二步就是将最后1个盘子从A移动到C。
第三步就是将在B上的盘子,通过A移动到C。
举个例子:A,B,C三根柱子,A柱子从下至上编号1,2,3的盘子
那么第一步就是将上2,3两个个盘子移动到B:那就是将3移动到C,将2移动到B,将3移动到B。
第二步就是将3移动到C。
第三步就是将2,3两个盘子移动到C:将3移动到A,将2移动到C,将3移动到C。
总结一下就是:
当A塔上有n个盘子是,先将A塔上编号1至n-1的盘子(共n-1个)移动到B塔上(借助C塔),
然后将A塔上最大的n号盘子移动到C塔上,
最后将B塔上的n-1个盘子借助A塔移动到C塔上。
- 追问: 我想问的是在上面那段代码中001步002步003步是怎么一步步实现的。
- 追答:已你的代码逻辑为例:3个盘子的调用顺序(--------------这个注释就是你说的第几步) hanoi(3, 'A’, 'B’, 'C’); hanoi(2, 'A’, 'C’, 'B’);--------------------------------------------------------//001步 hanoi(1, 'A’, 'B’, 'C’);-->move('A’, 'C’);//将1个盘子从A移动到C move('A’, 'B’);//将1个盘子从A移动到B--------------------------------------//002步 hanoi(1, 'C’, 'A’, 'B’);--->move('C’, 'B’);//将1个盘子从C移动到B hanoi(2, 'B’, 'A’, 'C’);--------------------------------------------------------------//003步 hanoi(1, 'B’, 'C’, 'A’);-->move('B’, 'A’);//将1个盘子从B移动到A move('B’, 'C’);//将1个盘子从B移动到C hanoi(1, 'A’, 'B’, 'C’);--->move('A’, 'C’);//将1个盘子从A移动到C
00分享举报
赞 (0)