首页 > 编程语言 > 详细

Python实现汉诺塔问题

时间:2021-03-09 18:47:15      阅读:24      评论:0      收藏:0      [点我收藏+]

汉诺塔小游戏

规则:一共有三个柱子A,B,C,每个柱子上可以套多个圆盘,大圆盘必须在下,小圆盘在上,所有圆盘在这三个柱子之间移动,一次只能移动一个圆盘,最终实现将所有A柱上N个的圆盘移动到C柱上。
技术分享图片

思路:先将除最大盘子以外的所有圆盘移动到B柱,再将最大的盘子移动到C柱,最后将剩余所有圆盘移动到C柱。

实现:递归思想

  1. 要实现将N个圆盘从A柱移动到C柱,首先需要将N-1个圆盘移动到B柱上,那么就可以将这N-1个圆盘想象成一个整体,移动(A,B,C)的位置为(A,C,B),这个整体要实现的就是将N-1个圆盘从A移动到B;
    技术分享图片
  2. 要实现将N-1个圆盘从A移动到B,就需要先将上面N-2个圆盘移动到C柱,再将第N-1个圆盘移动到B柱,再将N-2个圆盘移动到B柱上,就实现了第一步将N-1个圆盘移动到B柱上;
  3. 那么,如何将上面N-2个圆盘移动到C柱呢,只需要将这N-2个圆盘想象成一个整体,移动圆盘位置为(A,B,C),利用上述方法,重复实现
‘‘‘汉诺塔小游戏‘‘‘
i = 0
def hanno(n, a, b, c):
    global i
    i +=1
    if n == 1:
        print(a, ‘->‘, c)
        return
    else:
        hano(n-1, a, c, b)    # 将n-1个圆盘从a移动到b
        print(a, ‘->‘, c)     # 将第n个圆盘从a移动到c
        hano(n-1, b, a, c)    # 将剩余n-1个圆盘从b移动到c

num = int(input(‘>>请输入汉诺塔层数:‘))
hano(num, ‘A‘, ‘B‘, ‘C‘)
print(f‘一共移动了{i}次‘)

Python实现汉诺塔问题

原文:https://www.cnblogs.com/travellingcat/p/14506458.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!