问题提出:
古代有一个梵塔,塔内有3个座 A、B、C。
A座上有64个圆盘,盘子大小不等,大的在下,小的在上。
有一个和尚想把这64个盘子从A座移动到C座,每次只能移动一个圆盘,并在移动过程中始终保持大盘在下,小盘在上。在移动过程中只能利用B座中转。
请给出移动步骤。
解题思路:
这是 著名的汉诺塔问题。
解题思路 可以分解成:
1. 将63个盘子 从 A移动到B(以C为中介);
2. 最后一个盘子 从 A移动到C;
3. 将63个盘子 从B移动到C(以A为中介)。
闲话少说,直接上代码:
/* linolzhang 2009.03
Hanoi
*/
#include <stdio.h>
void Move(int n,char a,char b,char c)
{
if(n==1)
printf("%c ---> %c\n",a,c);
else
{
Move(n-1,a,c,b);
printf("%c ---> %c\n",a,c);
Move(n-1,b,a,c);
}
}
int main(int argc, char** argv)
{
int N;
printf("请输入盘子数量:");
scanf("%d", &N);
printf("开始移动: %d个盘子\n",N);
Move(N,'A','B','C');
getchar();
return 0;
}