题单:汉诺塔问题
题目描述
如下图所示,设有 nn 个大小不等的中空圆盘,按照从小到大的顺序叠套在立柱 A
上,另有两根立柱 B
和 C
。
现在要求把全部圆盘从 A
柱(称为源柱)移到 C
柱(称为目标柱),移动过程中可借助 B
柱(称为中间柱)。
移动时有如下要求:
- 一次只许移动一个盘。
- 任何时候、任何柱子上不允许把大盘放在小盘上边。
- 可使用任意一根立柱暂存圆盘。
问:如何用最少步数实现 nn 个盘子的移动?请打印出具体移动方案。
输入格式
一行一个正整数 n(1≤n≤18)n(1≤n≤18) 。
输出格式
输出若干行,第 ii 行表示第 ii 步的移动方案。
具体格式参见输出样例。
样例 #1
样例输入 #1
3
样例输出 #1
A->C
A->B
C->B
A->C
B->A
B->C
A->C
#include<bits/stdc++.h>
using namespace std;
void hanio(int n,char a,char b,char c)
{if(n==0){return ;}hanio(n-1,a,c,b);cout<<a<<"->"<<c<<endl; hanio(n-1,b,a,c);
}
int main(){int n;cin>>n;hanio(n,'A','B','C');return 0;
}