首先我们在我们脑海中或纸上先画三个盘子
如图所示如果我们要将其重a移动到b其中c为替代盘我们可以分如图三步将盘子移动好。之后在a上加一个盘子
如图我们先要考虑什么呢,是不是先考虑将上面两个盘子先移动到c上然后再将最底下的盘子移动到b上,而最上面现在有两个盘子这个时候的移动方法是不是可以参考上面两个盘子的移动方法,但盘子移动的目标位置却不一样。之后我们依次类推发现我们对于移动盘子我们只需要三步先将n-1个盘子都移到替代盘,然后再将最后一个盘子移动到b盘然后再将c上的盘子移动到b上,首先第一步我们是将a盘当作移动盘c当作目标盘,b当作替代盘,第二步只有一步就是移动一个盘子将a上的最后一个盘子给b盘,最后一步就是将c做为移动盘,b作为目标盘,a作为替代盘。这道题的关键在于就是使用递归来解决这个问题,大家将递归想象成下楼,这样就好理解了,从n层楼开始下直到下到第一层,问题解决,而这道题相当于我们有两个通道,每层楼我们都有两个人下楼,下楼方式都是一样的,但下楼的函数需要换一下,最终都是要下到第一楼,我们的函数结束。递归结束,下面附上我们的简单代码。
#include<bits/stdc++.h>
using namespace std;
void move(int a,char b,char c,char d)
{
if(a==1)
cout<<1<<": "<<b<<" -> "<<c<<endl;
else
{
move(a-1,b,d,c);
cout<<a<<": "<<b<<" -> "<<c<<endl;
move(a-1,d,c,b);
}
}
int main()
{
int a;
char b,c,d;cin>>a>>b>>c>>d;
move(a,b,c,d);
}