递归:汉诺塔问题
程序员文章站
2022-04-13 12:19:34
...
1.题目
2.思路
1、把A上面n-1个盘子移动到B上。
2、把A上最后一个移动到C;
3、把B上n-1个移动到A上,再把B上最后一个移动到C;
如此循环2,3,步骤,直到把最后一个盘子移动到C上
3.代码
/*
* @Author: yajie
* @Date: 2018-05-15 21:05:20
* @Last Modified by: yajie
* @Last Modified time: 2018-05-15 21:23:52
*/
#include <iostream>
using namespace std;
//将 src坐上吨n个盘子,以 mid坐为中转,移动到dest 坐
void Hanoi(int n, char src, char mid, char dest)
{
if(n == 1){ //1.1直接 从 src 移动至dest
cout << src << "->" << dest << endl;
return;
}
//1.2否则,先将上面 n-1 个盘子,以dest 坐为中转,移动到mid 坐
Hanoi(n-1,src,dest,mid);
//1.3 再将 剩下那个 从src 移动到 dest
cout << src << "->" << dest << endl;
//1.4 最后将 n-1 个盘子,从mid 移动到 dest
Hanoi(n-1,mid,src,dest);
return;
}
int main()
{
int n;//输入盘子的个数
cin >> n;
Hanoi(n,'A','B','C');
return 0;
}