汉诺塔问题
题目描述:
古代有一座汉诺塔,塔内有A、B、和C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,有个和尚想把这n个盘子移动到c座,并且在移动过程中,三个座上的盘子始终保持大盘在下,小盘在上,在移动过程中可以利用b座临时存放盘子。要求输出移动的过程:
输入样例和输出样例在下面已经给出:
include<stdio.h>
void f(int n,char qishi,char guodu,char mubiao)
{
if(n==1)
{
printf("%c->%c\n",qishi,mubiao); //给的盘子只有一个的时候,直接移动
}
else
{
f(n-1,qishi,mubiao,guodu); //上面的n-1个作为整体,从起始位移动到过渡位
printf("%c->%c\n",qishi,mubiao); //将最下面的盘子移动到目标位
f(n-1,guodu,qishi,mubiao); //将过渡位置的盘子通过起始位置移动到目标位
}
}
这个是c语言的代码实现,c++与这个一样的,重点是递归的思路。
int main()
{
int n;
scanf("%d",&n);
f(n,'A','B','C'); //直接调用递归函数就行
return 0;
}
浙公网安备 33010602011771号