首页 > 其他 > 详细

汉诺塔问题

时间:2021-07-10 22:13:47      阅读:57      评论:0      收藏:0      [点我收藏+]

问题描述:

有三个立柱A、B、C。A柱上穿有大小不等的圆盘N个,较大的圆盘在下,较小的圆盘在上。要求把A柱上的圆盘全部移到C柱(终点)上,保持大盘在下、小盘在上的规律(可借助B柱)。每次移动只能把一个柱子最上面的圆盘移到另一个柱子的最上面。请输出移动过程。

技术分享图片

 

 

解答

这是动态规划问题中的一种,用递归来实现较为简单方便。

所以说一共就三步

把 前n-1 号盘子从A柱经过C柱移动到B柱

把n号盘子从A柱移动到C柱

然后把n-1个盘子从B柱经过A柱移动到C柱

代码:

 1 def hanoi(n, a, b, c):
 2     if n == 1:
 3         print(print("moving from %s to %s" % (a, c)))
 4     else:
 5         hanoi(n - 1, a, c, b)
 6         hanoi(1, a, b, c)
 7         hanoi(n - 1, b, a, c)
 8 
 9 
10 hanoi(3, A, B, C)

 

汉诺塔问题

原文:https://www.cnblogs.com/dzwclimber/p/14994881.html

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