C语言实现汉诺塔(图文详解)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语⾔实现汉诺塔(图⽂详解)
⽬录
思路:
当n=1时:
当n=2时:
当n=3时:
当n=4时:
见代码
运⾏截图
总结
汉诺塔的游戏规则:
有三根⾦刚⽯柱⼦A、B、C,在A柱⼦上从下往上按照⼤⼩依次减⼩的顺序摞着64⽚黄⾦环。

⼤梵天命令婆罗门把环从下⾯开始按⼤⼩顺序重新摆放在另⼀根柱⼦上。

并且规定,在任何⼀个柱⼦上,⼩环上不能放⼤环,在三根柱⼦之间⼀次只能移动⼀个环。

即将A柱⼦上全部的环通过中间柱⼦B(B柱⼦作为中介)移动到C柱⼦上
当A只有⼀个环的时候:
A->C
当A只有两个环的时候:
A->B A->C B->C
当A只有三个环的时候:
A->C A->B C->B A->C B->A B->C A->C
思路:
1、将 n-1个环先放到B柱⼦上
2、将A柱⼦上的最后⼀个环移动到C柱⼦上
3、将n-1个环从B柱⼦移动到C柱⼦上
当n=1时:
1、将0个环先放到B柱⼦上
2、将A柱⼦上的最后⼀个环移动到C柱⼦上:A->C
3、将0个环从B柱⼦移动到C柱⼦上
当n=2时:
1、将1个环先放到B柱⼦上:A->B
2、将A柱⼦上的最后⼀个环移动到C柱⼦上:A->C
3、将1个环从B柱⼦移动到C柱⼦上:B->C
当n=3时:
1、将2个环先放到B柱⼦上:使⽤递归将2个环放到B上,因为A柱⼦的最后⼀个环是最⼤的因此可以先不理会,递归重复当n=2时的步骤,不过是从将2个环从A放到C上改为将2个环从A放到B上了
2、将A柱⼦上的最后⼀个环移动到C柱⼦上:A->C
3、将2个环从B柱⼦移动到C柱⼦上:使⽤递归将2个环从B柱⼦移动到C柱⼦上,此时C柱⼦上已经有了最⼤的⼀个环因此可以不⽤再理会了,递归重复当n=2的步骤,不过是从将2个环从A放到C上改为将2个环从B放到C上了
当n=4时:
1、将3个环先放到B柱⼦上:递归重复n=3的步骤,不过是从将3个环从A放到C上改为将3个环从A放到B上了
2、将A柱⼦上的最后⼀个环移动到C柱⼦上:A->C
3、将3个环从B柱⼦移动到C柱⼦上:递归重复当n=3的步骤,不过是从将3个环从A放到C上改为将3个环从B放到C上了
见代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void move(char X, char Y)
{
printf("%c->%c ", X, Y);
}
void HanoiTower(int n, char A, char B, char C)
{
if (n == 1)//递归终⽌条件
{
move(A, C);
return;
}
else
{
HanoiTower(n - 1, A, C, B);//将n-1个环从A柱⼦放到B柱⼦上,C柱⼦作为中介
move(A, C);//将A柱⼦上的最后⼀个环移动到C柱⼦上
HanoiTower(n - 1, B, A, C);//将n-1个环从B柱⼦放到C柱⼦上,A柱⼦作为中介
}
}
int main()
{
printf("请确认A柱⼦上⼀共有多少个环:\n");
int n = 0;
scanf("%d", &n);
HanoiTower(n, 'A','B','C');//将n个环从A柱⼦放到C柱⼦上,B柱⼦作为中介
}
运⾏截图
总结
本篇⽂章就到这⾥了,希望能给你带来帮助,也希望您能够多多关注的更多内容!。

相关文档
最新文档