问题描述:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个和尚想把这64个盘子从A移到C座,但又要求,每次只能移动一个盘子,每步移动大的都要在小的下面,其中移动过程中可以借助中转B座。
思路分析:这个问题可以采用递归的方法,可以先假设层数少一点,比如三层,在我们自己挪动的过程中可以发现我们先把上面两层移走了,移到了B座来做中转,然后把最后一层放到目标底座的最底层,再重复从A到B的操作,将B上的移到C座,完成目标。所以当有n层时,可以先将上面的n-1层先移到中转层,即B座,再将最后一层移动C座,将B座上的再移到C座,如此递归,知道n为1,移动任务也就完成了。
程序代码:
#include <iostream> using namespace std;
int main()
{
int n; cin>>n; hanoi(n,'A','B','C'); 汉诺塔函数;用来输出操作步骤。 return 0;
}
viod hanoi(int n,char src,char mid,char dest) n代表层数,src,mid,dest分别代表三个底座.
{
if(n == 1)
{
cout << src << "-> "<<dest << endl; return 0;
}
hanoi(n-1,src,dest,mid); 借助dest将n-1层盘子从src移到mid
cout<< src <<"->"<<dest<<endl;
hanoi(n-1,mid,src,dest); 借助src将n-1层盘子从mid移到的dest上
return ;
}