有三根标为A,B,C的柱子,A柱子上从上到下按金字塔状依次叠放着n个半径从1厘米到n厘米的的圆盘,要把A上的所有盘子移动到柱子C上,中间可以临时放在B上,但每次移动每一根柱子上都不能出现大盘子在小盘子上方的情况,要求用最少的移动次数完成,请编程模拟每次移动。
时间: 2024-03-21 20:40:25 浏览: 345
梵塔难题:已知3个柱子1、2、3和两个圆盘A、B(A比B小),初始状态下,A、B依次放在1柱上,目标状态是A、B依次放在3柱子上,条件是每次可移动一个盘子,盘子上方是空顶方可移动,而且任何时候不允许大盘在小盘之上。
这是一个经典的汉诺塔问题,可以使用递归来解决。
下面是代码实现:
```python
def hanoi(n, A, B, C):
if n == 1:
print(f"move disk {n} from {A} to {C}")
else:
hanoi(n-1, A, C, B)
print(f"move disk {n} from {A} to {C}")
hanoi(n-1, B, A, C)
n = 3
hanoi(n, 'A', 'B', 'C')
```
输出结果:
```
move disk 1 from A to C
move disk 2 from A to B
move disk 1 from C to B
move disk 3 from A to C
move disk 1 from B to A
move disk 2 from B to C
move disk 1 from A to C
```
其中,`n` 表示圆盘的个数,`A`、`B`、`C` 表示三根柱子的名称。函数 `hanoi` 的参数表示当前需要移动的圆盘个数,以及三根柱子的名称。当只有一个圆盘时,直接将其从 A 柱子移动到 C 柱子即可;当有多个圆盘时,先将前 `n-1` 个圆盘从 A 柱子移动到 B 柱子上(此时 C 柱子作为临时柱子),再将第 `n` 个圆盘从 A 柱子移动到 C 柱子上,最后将前 `n-1` 个圆盘从 B 柱子移动到 C 柱子上即可。
阅读全文