问题描述:
古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上,在移动过程中可以利用B座,要求输出移动的步骤。
思路:
分解为先把n-1个盘子移动到B座,把最后一个盘子移动到C座,再把B座上的n-1个盘子移到C座。
代码:
#include <stdio.h>
void Hanoi(int n, char src, char mid, char dest)
//将src座上的n个盘子,以mid座为中转,移动到dest座
{
if (n == 1)
{
printf("%c->%c\n", src, dest);
return;
}
Hanoi(n - 1, src, dest, mid);//先将n-1个盘子从src移动到mid
printf("%c->%c\n", src, dest);//再把一个盘子从src移动到dest
Hanoi(n - 1, mid, src, dest);//最后将n-1个盘子从mid移动到dest
return;
}
int main()
{
int n;
scanf("%d", &n);
Hanoi(n, 'A', 'B', 'C');
return 0;
}