python处理汉诺塔问题

题目

不清楚汉诺塔规则可以点击查看。
要求:A、B、C 3个柱子,现在要求以C柱子为辅助,将数量为n的圆盘从A柱子移到B柱子(圆盘最大的在最下面)。

分析

  • A柱子为源柱子,B柱子为目标柱子,C柱子为辅助柱子。
  • 把A柱子的n-1个圆盘移动到C柱子。
  • 把A柱子剩余的最大圆盘移动到B柱子。
  • 把C柱子的n-1个圆盘移动到B柱子。
  • C柱子的n-1个怎么移动呢?按照上述步骤递归处理。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def mov(a, b, c, n):    # n表示圆盘个数,a/b/c分别为源/目标/辅助柱子
if n == 1:
# print("{0}-->{1}:{2}".format(a[0], b[0], a[-1]))
b.append(a.pop())
# print(x, y, z)
return
mov(a, c, b, n-1)
# print("{0}-->{1}:{2}".format(a[0], b[0], a[-1]))
b.append(a.pop())
# print(x, y, z)
mov(c, b, a, n-1)


x = ['x', 3, 2, 1]
y = ['y']
z = ['z']
mov(x, y, z, 3)
print(x, y, z)

使用3个列表模拟A、B、C柱子。
注释部分可打印出具体移动过程。

Recommended Posts