用c++实现汉诺塔问题
时间: 2024-11-22 09:27:26 浏览: 1
汉诺塔问题是一个经典的递归问题,通常涉及三个柱子和一堆盘子,目标是从第一个柱子移动所有的盘子到第三个柱子,每次只能移动一个盘子,并且大盘子不能放在小盘子上面。以下是一个简单的C++解决方案:
```cpp
#include <iostream>
using namespace std;
// 汉诺塔递归函数
void hanoi(int n, char from_rod, char to_rod, char aux_rod) {
if (n == 1) { // 基本情况:只有一个盘子,直接移动即可
cout << "Move disk 1 from rod " << from_rod << " to rod " << to_rod << endl;
return;
}
// 递归步骤:先将n-1个盘子从from_rod移到aux_rod
hanoi(n - 1, from_rod, aux_rod, to_rod);
// 然后移动最大的那个盘子到目标位置
cout << "Move disk " << n << " from rod " << from_rod << " to rod " << to_rod << endl;
// 最后将n-1个盘子从aux_rod移到to_rod
hanoi(n - 1, aux_rod, to_rod, from_rod);
}
int main() {
int num_disks = 3; // 示例为3个盘子
hanoi(num_disks, 'A', 'C', 'B'); // A为起始柱子,C为目标柱子,B为辅助柱子
return 0;
}
```
当运行此程序时,它会按照汉诺塔问题的经典规则逐步打印出移动每个盘子的指令。记得你可以更改`num_disks`变量来测试不同数量的盘子。
阅读全文