A为存放盘子的塔,B为目标塔,C为辅助塔
算法分为三步
一、将A上n-1个盘子全部放到C塔上
二、将A上剩下的一个盘子放到B塔上
三、将C塔上的盘子全部放到B塔上
注:不需要考虑如何移动n-1个盘子
递归过程:
首先,将A上n-1个盘子放到C上,然后将A上剩下的一个盘子放到B上,然后可以看成A为辅助塔,B为目标塔,C为放盘子的(B中有一个最大的盘子,但任何盘子都能放到上面,所以可以看做为空),然后将C上n-2个盘子放到A上,剩下的地n-1个盘子放到B上,此时便完成了一次递归,然后不断地重复上述过程即可
代码
#include <iostream>
using namespace std;
void TowersofHanoi(int n,char x,char y,char z)
{
if(n)
{
TowersofHanoi(n-1,x,z,y);//将n-1个盘子从x移动到z
cout << "From" << x << "To" << y << endl;//将第n个盘子移动到y
TowersofHanoi(n-1,z,y,x);//将z上的盘子移动到y
}
}
int main()
{
TowersofHanoi(3,'A','B','C');
return 0;
}