前言
本系列文章是笔者学习数据结构的笔记,如有不妥之处欢迎指正
题干
Description
汉诺塔是源自印度神话的玩具。
神创造世界的是哦胡制造了三根柱子,在其中一根柱子上从上至下按大小顺序依次摞有64片黄金圆盘。
神命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上,要求小圆盘上面不能放大圆盘且一次只能移动一个圆盘。
Input
输入金片的个数n。这里的n<=10。
Output
输出搬动金片的全过程。格式见样例。
Sample
Input
2
Output
Move disk 1 from A to B
Move disk 2 from A to C
Move disk 1 from B to C扫描二维码关注公众号,回复: 12395802 查看本文章
分析
由规律可得
如果是一个盘子
直接将A柱的盘子移到C柱
否则
先将A柱的n-1个盘子借助C移到B
将A柱的盘子从A移到C
最后将B柱的n-1个盘子借助A移到C
- 以上分析直接写成递归的形式
代码
#include<stdio.h>
void hannuota(int n,char ch1,char ch2,char ch3)
{
if(n==1) //如果是一个盘子
{
printf("Move disk %d from %c to %c\n",n,ch1,ch3); //直接将A柱的盘子移到C柱
}
else //否则
{
hannuota(n-1,ch1,ch3,ch2); //先将A柱的n-1个盘子借助C移到B
printf("Move disk %d from %c to %c\n",n,ch1,ch3); //将A柱的盘子从A移到C
hannuota(n-1,ch2,ch1,ch3); //最后将B柱的n-1个盘子借助A移到C
}
}
int main()
{
int n;
scanf("%d",&n);
hannuota(n,'A','B','C');
}
输入
3
输出
Move disk 1 from A to C
Move disk 2 from A to B
Move disk 1 from C to B
Move disk 3 from A to C
Move disk 1 from B to A
Move disk 2 from B to C
Move disk 1 from A to C