U156138 汉诺塔问题C++
时间: 2024-11-04 15:07:39 浏览: 18
算法课程oj习题作业答案
U156138 汉诺塔问题是经典的递归问题,源于古老的印度数学游戏。它涉及将一堆盘子从一根柱子移动到另一根柱子,遵守规则:任何时候只能移动一个盘子,大盘子不能放在小盘子上面。给定三根柱子A、B和C,目标是从A柱移动所有盘子到C柱,过程中可以借助B柱。
在C++中解决汉诺塔问题,通常会定义一个递归函数Hanoi,接受三个参数:源柱子(A)、目标柱子(C)以及辅助柱子(B)。基本情况是当只有一个盘子时,直接移动。对于包含n个盘子的情况,递归地先将n-1个盘子从A移动到B,然后将最大的盘子从A移动到C,最后再把B上的n-1个盘子移动到C。
下面是一个简单的C++代码示例:
```cpp
void hanoi(int n, char from, char to, char aux) {
if (n > 0) {
// Step 1: Move n-1 disks from source to auxiliary tower
hanoi(n - 1, from, aux, to);
// Step 2: Move the nth disk from source to target
cout << "Move disk " << n << " from " << from << " to " << to << endl;
// Step 3: Move the n-1 disks from auxiliary to target tower
hanoi(n - 1, aux, to, from);
}
}
int main() {
int numDisks = 3; // 可根据需求改变盘子数
hanoi(numDisks, 'A', 'C', 'B');
return 0;
}
```
阅读全文