c语言输出7个盘的汉诺塔解决方案
答案:1 悬赏:0 手机版
解决时间 2021-03-31 22:14
- 提问者网友:饥饿走向夜
- 2021-03-31 05:32
c语言输出7个盘的汉诺塔解决方案
最佳答案
- 五星知识达人网友:舍身薄凉客
- 2021-03-31 07:09
假设三根柱子A/B/C,要从A移动到B,有n个盘子,那么可以设函数
hanoi(int n,char A ,char B,char C);
其中:n是盘子数量,A,B,C是柱子名字
先考虑一个盘子的情况
一个盘子的时候,显然,A直接放到B就可以了
多个盘子的情况
如果多个盘子,那么不能直接从A放到B,但是可以借助C柱子
即,
1)先把n-1个盘子从A柱子借助B柱子放到C柱子;
2)把A放到B;
3)C上的n-1个盘子借助A放到B盘子
这样,完成了状态的转移
代码如下:
#include
void hanoi(int n,char A ,char B,char C)
{
if(n==1)
printf("%c->%c
", A,B);
else{
hanoi(n-1,A,C,B);
printf("%c->%c
",A,B);
hanoi(n-1,C,A,B);
}
}
int main()
{
int m;printf("input the number of diskes:");
scanf("%d",&m);
printf("The step to moving %d diskes:
",m);
hanoi(m,'A','B','C');
return 0;
}输入7,即可得到答案
hanoi(int n,char A ,char B,char C);
其中:n是盘子数量,A,B,C是柱子名字
先考虑一个盘子的情况
一个盘子的时候,显然,A直接放到B就可以了
多个盘子的情况
如果多个盘子,那么不能直接从A放到B,但是可以借助C柱子
即,
1)先把n-1个盘子从A柱子借助B柱子放到C柱子;
2)把A放到B;
3)C上的n-1个盘子借助A放到B盘子
这样,完成了状态的转移
代码如下:
#include
void hanoi(int n,char A ,char B,char C)
{
if(n==1)
printf("%c->%c
", A,B);
else{
hanoi(n-1,A,C,B);
printf("%c->%c
",A,B);
hanoi(n-1,C,A,B);
}
}
int main()
{
int m;printf("input the number of diskes:");
scanf("%d",&m);
printf("The step to moving %d diskes:
",m);
hanoi(m,'A','B','C');
return 0;
}输入7,即可得到答案
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯