解题思路:可以用递归思路分析,即把原问题分解成一个或多个形式相同,但规模小一些的问题,结果会发现,要把 A座上的 n个盘子通过 B座中移动到 C座,可以分为一下三个步骤来完成
(1)将 A座上的 n - 1个盘子以 C座为中转,移动到 B座
(2)把 A座最小面的一个盘子移动到 C座
(3)将 B座上的 n - 1个盘子以A座为中转,移动到 C座
上面的(1)和(3)两个步骤和原问题形式相同,只是规模少了 1(要处理的盘子数目少了 1)。当然,如果 n=1,那么只需要一个步骤,即把 A座上的一个盘子移动到 C座
#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);
return;
}
int main(){
int n;
cin>>n;
Hanoi(n,'A','B','C');
return 0;
}
有什么不懂可以在评论区问我,我会及时回答的,感谢阅读,希望能帮到您!