汉诺塔一个有趣的游戏,递归算法的经典题目。题目不在赘述。
思路:
- 将n-1个圆盘(除最大的圆盘外)从柱子a移到b。
- 将最大的圆盘从柱子a移动到柱子c。
-
将柱子b上n-1圆盘从柱子b移动到c。
1,3 方法一致,都是利用辅助柱子移动圆盘
#include<stdio.h>
void han(int n,char a, char b, char c)
{
if(n==1)
printf("move %d disk from %c to %c\n",n,a,c);
else
{
han(n-1,a,c,b);
printf("move %d disk from %c to %c\n",n,a,c);//关键点,利用栈思想来理解。
han(n-1,b,a,c);
}
}
int main()
{
int N;
char A, B,C;
scanf("%d%c%c%c",&N,&A,&B,&C);
han(N,'A','B','C');
return 0;
}
测试几组数据就会发现 当N为偶数时顺时针移动 A B C, 当N为奇数时顺时针移动 A C B.