程序设计与算法(二)算法基础-郭炜 2.1.1 汉诺塔问题
古代有一个梵塔﹐塔内有三个座A、B、C,A座上有64个盘子﹐盘子大小不等,大的在下﹐小的在上(如图)。有一个和尚想把这64个盘子从A座移到c座﹐但每次只能允许移动一个盘子﹐并且在移动过程中﹐3个座上的盘子始终保持大盘在下﹐小盘在上。在移动过程中可以利用B座﹐要求输出移动的步骤。
#include <iostream>
using namespace std;
void Hanoi(int n,char src,char mid,char dest)
//将src座上的n个盘子,以mid座为中转,移动dest座
{
if(n == 1) //只需移动一个盘子
{
cout << src << "->" << dest << endl;
//直接将盘子从src移动到dest即可
return ; //递归终止
}
Hanoi(n - 1,src,dest,mid); //先将n - 1个盘子从src移动到mid
cout << src << "->" << dest << endl;
//再将一个盘子从src移动到dest
Hanoi(n - 1,mid,src,dest); //最后将n - 1个盘子从mid移动到dest
return ;
}
int main()
{
int n;
cin >> n;
Hanoi(n,'A','B','C');
return 0;
}