Python 汉诺塔

在汉诺塔游戏中,有三个分别命名为A、B、C得塔座,几个大小各不相同,从小到大一次编号得圆盘,每一个原盘中间有一个小孔。最初,全部得圆盘都在A塔座上,其中最大得圆盘在最下面,而后是第二大,以此类推.python

 游戏的目的是将全部的圆盘从塔座A移动到塔座B;塔座C用来防止临时圆盘,游戏的规则以下:3d

    一、一次只能移动一个圆盘。blog

    二、任什么时候候都不能将一个较大的圆盘压在较小的圆盘上面。游戏

    三、除了第二条限制,任何塔座的最上面的圆盘均可以移动到其余塔座上。utf-8

 汉诺塔问题解决思想:class

    在解决汉诺塔问题时,事实上,咱们不是罪关心圆盘1开始应该挪到哪一个塔座上,而是关心最下面的圆盘4。固然,咱们不能直接移动圆盘4,可是圆盘4最终将从塔座A移动到塔座B。按照游戏规则,在移动圆盘4以前的状况必定以下图方法

  咱们仍将分析,如何将前三个圆盘从A移动到C,而后圆盘4从A移动到B,前三个圆盘从C再移动到B。im

  可是上面的步骤能够重复利用!例如将三个圆盘从A移动到C,那么应该先将前两个圆盘从A移动到B,而后将圆盘3从A移动到C,最后将前两个圆盘从B移动到C。命名

  持续简化这个问题,最终咱们将只须要处理一个圆盘从一个塔座移动到另外一个塔座的问题。img

 

总而言之,就是将一座塔移动到另外一座塔上,且移动的过程当中大的圆盘不能在小的圆盘上面。

#codiing = utf-8

def hanoi(n,a,b,c):   #n = 圆盘数 ; a,b,c为三棵柱子(即起点、缓冲区、终点)
    if n == 1:
        print(a, '-->', c)
    else:
        hanoi(n - 1, a, c, b)
        print(a, '-->', c)
        hanoi(n - 1, b, a, c)

if __name__ == '__main__':
    hanoi(4,'A','B','C')     #输出把全部盘子从A借助B移动到C的方法
相关文章
相关标签/搜索