美文网首页
汉诺塔逻辑设计理解

汉诺塔逻辑设计理解

作者: Da_Xiang | 来源:发表于2018-10-16 00:05 被阅读0次

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

    相关文章

      网友评论

          本文标题:汉诺塔逻辑设计理解

          本文链接:https://www.haomeiwen.com/subject/myxczftx.html