汉诺塔问题
内存限制: 256 MiB 时间限制: 1000 ms 标准输入输出 题目类型: 传统 评测方式: 文本比较
题目描述
1、一次只许移动一个盘
2、任何时候、任何柱子不允许把大盘放在小盘上面。
3、可使用任一一根立柱暂存圆盘。
问:如何使用最少步数实现 n 个盘子的移动?打印出具体移动方案。
输入格式
一行一个数 n, 1 <= n <= 18
输出格式
输出若干行,第 i 行表示第 i 步的移动方案。具体格式参见输出样例。
样例
样例输入
复制3
样例输出
复制A->C
A->B
C->B
A->C
B->A
B->C
A->C
#include <bits/stdc++.h>
using namespace std;
void f(int n, char A, char B, char C) {
if(n == 1) {
cout << A << "->" << C << endl;
return;
}
f(n - 1, A, C, B);
cout << A << "->" << C << endl;
f(n - 1, B, A, C);
}
int main() {
int n;
cin >> n;
f(n, 'A', 'B', 'C');
return 0;
}