Python 汉诺塔问题实现

zhng365 / 2023-05-12 / 原文

看了几个讲解的文章和视频,基本都没有很明确的说明解法。

实际上Python实现是将汉诺塔的问题归纳成了最底层的大盘子N 以及 N以上的其他盘子 N-1,以最简单的两个盘子的实现,以递归方式来解决多个盘子的问题。

环境模拟:大盘子是N,小盘子是(N-1),三个柱子:first ,second,third,大盘子在first上,借助second,全部移动到third

两个盘子怎么移动? 三个步骤即可实现:

步骤一:最小的盘子(N-1),从first上移动second

步骤二:最大的盘子N,从first上移动到到third

步骤三:最小的盘子(N-1),从second上移动到third

代码实现时候,着重注意 位置参数,这是很重要的一点,很多文章和视频都没有讲明白这个位置参数在汉诺塔实现上的问题。

def move(start,target):
    print('Move %s' %start,'to','%s' %target)

def hannoi(n,first,second,third):
    if n == 1:
        move(first,third)
    else:
        hannoi(n-1,first,third,second) #步骤一:最小的盘子(N-1),从first上移动second
        hannoi(1,first,second,third) #步骤二:最大的盘子N,从first上移动到到third
        hannoi(n-1,second,first,third)#步骤三:最小的盘子(N-1),从second上移动到third

print('N=1')
hannoi(1,'A','B','C')
print('N=2')
hannoi(2,'A','B','C')
print('N=3')
hannoi(3,'A','B','C')