汉诺塔逻辑设计理解

2018-10-16  本文已影响0人  Da_Xiang

附逻辑设计正面推导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)

上一篇下一篇

猜你喜欢

热点阅读