首先、三个
小、中、大
小到A上、中到B、小到中上、大到C上、小到A上、中到大上、小到中上。
也就是小到目标上、中到缓冲上、小到中上、大到目标上、小到初始位置、中到大上、小到中上。
这样。
如果三个都想不出来的话...
那两个总不可能不会了吧???
小挪到缓冲上、大挪到目标上、小挪到大上,
三个就假设是两个的进阶版、先把中间当目标位置,都挪到中间、再把大的挪到右面,然后(现在中间是起始位置)目标换回右面、把中间的挪到右面
四个和两个变三个的做法一样、 都挪到中间、大的挪右边、再以左边的为缓冲从中间往右挪实现方法:
#include <bits/stdc++.h>
using namespace std;
void hannoi (int n, char A, char B, char C) // 起始盘、缓冲盘、目标盘
{
if (n == 1){
cout << "移动圆盘" << n << "从" << A << "到" << C << endl; //把最后一个圆环从起始盘移动到目标盘。
}
else{
hannoi (n-1, A, C, B); // 把N-1个圆环从起点盘移动到(当前)没有任何圆环的过度盘;通过B、C盘在此函数调用中调用位置的互换,来实现把N-1个圆环从A盘到B盘的转移【A--B】。
cout << "移动圆盘" << n << "从" << A << "到" << C << endl;
// hannoi (1, A, B, C);
hannoi (n-1, B, A, C); //通过A、B盘在此函数调用中位置的互换,来实现N-1个圆环从B盘到C盘的转移【B--C】。
}
}
int main()
{
int n;
cin >> n;
hannoi (n, 'a', 'b', 'c');
return 0;
}
python实现:
def move(n,a,b,c):
if n==1:
print(a,'->',c)
else:
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)