还要在每次移动后打印出每个柱子上有的圆盘编号
时间: 2024-10-25 17:08:52 浏览: 10
为了在每次移动后打印出每个柱子上的圆盘编号,你可以稍微修改一下之前的 `move_disk()` 函数。下面是更新后的代码示例:
```python
def move_disk(n, source, auxiliary, target):
print(f"Move disk {n} from {source} to {target}")
print(f"{target}: {get_disk_contents(target)}")
def get_disk_contents(column):
if column == 'A':
return [str(i) for i in range(1, n+1)]
elif column == 'B':
return [str(n-i+1) for i in range(n, 0, -1)]
else: # C
return []
def hanoi(n, A, B, C):
if n > 0:
move_disk(n, A, C, B) # 移动前先打印C的内容
hanoi(n - 1, A, C, B)
move_disk(n, B, A, C) # 移动后打印A的内容
# 初始化圆盘列表
disks = [str(i) for i in range(1, n+1)]
# 开始Hanoi塔的移动
hanoi(len(disks), 'A', 'B', 'C')
def main():
# 为了适应动态添加圆盘,这里使用一个函数来模拟初始状态
# 实际应用中,直接给 diskes 列表赋值即可
init_disks(5)
main()
if __name__ == "__main__":
main()
```
`get_disk_contents()` 函数用于返回对应柱子上圆盘的编号列表,`move_disk()` 中现在包含了打印当前目标柱子内容的部分。当执行 `hanoi()` 函数时,会按照移动顺序显示各阶段柱子的状态。
阅读全文