#include <iostream>
using namespace std;//第一个塔为初始塔,中间的塔为借用塔,最后一个塔为目标塔
int step = 1;//记录步数
void move(int n, char begin, char destination) //将编号为n的盘子由begin移动到destinaion
{
cout << "第 " << step++ << " 步:将" << begin <<"的"<< n << "号盘子" << "移动到" << destination << endl;
}
void hanoi(int n, char begin, char denpend_on, char destination)//将n个盘子由初始塔移动到目标塔(利用借用塔)
{
if (n == 64) hanoi(n - 1, begin, destination, denpend_on);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上
move(n, begin, destination); //将剩下的一个盘子移动到目的塔上
hanoi(n - 1, denpend_on, begin, destination);//最后将借用塔上的n-1个盘子移动到目的塔上
}
int main()
{
cout << "下面是64个盘子移动的效果:" << endl;
int n=64; char x = 'A', y = 'B', z = 'C';
cout << "盘子移动过程如下:" << endl;
hanoi(n, x, y, z);
return 0;
}
汉诺塔问题
最新推荐文章于 2022-01-13 16:45:36 发布