汉诺塔
汉诺塔问题:
include
using namespace std;
// 递归函数:把 n 个盘子 从 from 借助 tmp 移到 to
void hanoi(int n, char from, char tmp, char to) {
// 递归出口:只剩 1 个盘子,直接移
if (n == 1) {
cout << from << " " << to << endl;
return;
}
// 1. 先把上面 n-1 个盘子 从 A → B (借助 C)
hanoi(n - 1, from, to, tmp);
// 2. 把最底下的 1 个大盘子 从 A → C
cout << from << " " << to << endl;
// 3. 把 B 上的 n-1 个盘子 从 B → C (借助 A)
hanoi(n - 1, tmp, from, to);
}
int main() {
int n;
cin >> n;
// 目标:n 个盘子,A → C,借助 B
hanoi(n, 'A', 'B', 'C');
return 0;
}
3 步核心逻辑:
把上面 n-1 个盘子:从起点杆 → 辅助杆
把最底下 1 个大盘子:从起点杆 → 目标杆
把 n-1 个盘子:从辅助杆 → 目标杆

浙公网安备 33010602011771号