有三根柱子和一些大小不同的圆盘,开始时所有的圆盘都按照从小到大的顺序堆叠在柱子A上,要求把所有的圆盘移动到柱子C上,但是移动过程中要满足以下规则:
- 每次只能移动一个圆盘。
- 不能将一个较大的圆盘放在较小的圆盘上面。
#include <iostream>
using namespace std;
// 汉诺塔函数的实现
// n: 圆盘的数量
// from: 源柱子
// to: 目标柱子
// aux: 辅助柱子
void hanoi(int n, char from, char to, char aux) {
// 基本情况:如果只有一个圆盘,直接移动到目标柱子
if (n == 1) {
cout << "Move disk 1 from rod " << from << " to rod " << to << endl;
return;
}
// 递归调用:先将 n-1 个圆盘从源柱子移动到辅助柱子
hanoi(n - 1, from, aux, to);
// 输出移动信息:将最底下的圆盘从源柱子移动到目标柱子
cout << "Move disk " << n << " from rod " << from << " to rod " << to << endl;
// 递归调用:将 n-1 个圆盘从辅助柱子移动到目标柱子
hanoi(n - 1, aux, to, from);
}
int main() {
int num_disks; // 圆盘的数量
char source = 'A', destination = 'C', auxiliary = 'B'; // 三个柱子的标识
// 输入圆盘的数量
cout << "Enter the number of disks: ";
cin >> num_disks;
// 调用汉诺塔函数
hanoi(num_disks, source, destination, auxiliary);
return 0;
}