码迷,mamicode.com
首页 > 其他好文 > 详细

解决汉诺塔问题

时间:2020-07-04 01:39:16      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:汉诺塔问题   info   div   loading   else   世界   思考   http   def   

汉诺塔问题源于印度一个古老传说。相传大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?技术图片

汉诺塔问题的解决思路:如果我们要思考每一步怎么移可能会非常复杂,但是可以将问题简化。我们可以先假设除a柱最下面的盘子之外,已经成功地将a柱上面的63个盘子移到了b柱,这时我们只要再将最下面的盘子由a柱移动到c柱即可。

动图技术图片

 

def hano(n,x,y,z):
    if n==1:
        print(x,"->",z)
    else:
        #将n-1个盘子从x->y
        hano(n-1,x,z,y)
        #将剩余的最后一个盘子从x->z
        print(x,"->",z)
        #将剩余的n-1个盘子从y->z 
        hano(n-1,y,x,z)

n = int(input("请输入汉诺塔的层数:"))

hano(n,"A","B","C")

 

技术图片 

解决汉诺塔问题

标签:汉诺塔问题   info   div   loading   else   世界   思考   http   def   

原文地址:https://www.cnblogs.com/hwb-znnsyw/p/13233395.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!