汉诺塔逻辑设计理解
附逻辑设计正面推导https://blog.csdn.net/xb2355404/article/details/79144451
以下是个人想法:
文章中什么是与一阶汉诺塔的移动相同呢?就是在不移动柱子前,一阶汉诺塔的位置变换A-->C
而在移动柱子后,实现了和一阶汉诺塔理论的位置变换,不过此时的从A-->C是在柱子的ACB顺序下实现
然后把最大环放到柱子C下,此时从A-->C是在柱子ABC顺序下实现
最后要把小环放在柱子C上,不过此时的从A-->C是在柱子的BAC顺序下实现
要充分理解移动柱子的目的是什么?——是为了重复实现一阶汉诺塔的位置变换A-->C。记住此A-->C是点与点,而柱子顺序相当于圆环具体位置到哪个具体位置。
附Py源代码
def move(n,a,b,c):
if n == 1:
print("move",a,"-->",c)
else:
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
move(3,"A","B","C")
附逻辑设计反面推导https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431756044276a15558a759ec43de8e30eb0ed169fb11000
如果为了方便记忆可以这样理解
#因为n=3,所以需要将a柱3个盘子(3个盘子暂表示为A1,A2,A3)通过b柱移动到c柱上。
#move(n-1,a,c,b) #是为了将a柱中A1,A2,A3由c柱当介质放到b柱中(A1→C,A2→B,C(A1)→B)=(A→C,A→B,C→B)。
因为#move(1,a,b,c)固定了A3进入c柱中,所以a柱中的A3不需要移动到b柱中。
#move(1,a,b,c) #是为了把a柱中最后一个也就是A3放入c柱中。
(A3→C)=(A→C)
#move(n-1,b,a,c) #是为了将已经从a柱中移动到b柱中的A1,A2由a柱当介质再放到c柱中
(B(A1)→A,B(A2)→C,A(A1)→C)=(B→A,B→C,A→C)