资讯专栏INFORMATION COLUMN

河内之塔(汉诺塔)

fredshare / 2074人阅读

摘要:当盘子个数超过你个时,其实就是通过递归处理两个盘子每次只走三步即深度遍历二叉树代码用于存放移动的每一步骤移动盘子的递归函数当前处理的盘子代表当前的三根柱子

题目

三个柱子 A、B、C。在A柱子从上到下 按照从小到大的顺序放置64盘子,命令将所有的盘子从A柱子移至C柱子,并且搬运过程中小盘子不能放在大盘子上面,且 在三根柱子之间一次只能移动一个盘子

解题思路:

(1) 一个盘子 :

1: A--->C

(2) 两个盘子:

(3)三个盘子:


(4)四个盘子 :

总结:

用n表示盘子总数

(1)当只有一个盘子(n=1)的时候,直接从A到C;

(2)当有两个盘子(n=2)的时候,将第二根柱子B当做辅助柱,共三步;

第一个盘子(n-1)从A到B,第二个盘子(n)从A到C,第一个盘子(n-1)从B到C。

(3)当盘子个数超过2(你>2)个时,其实就是 通过 递归 处理两个盘子(每次只走三步):(n-1)A—>B, (n)A-->C, (n-1)B-->C ;即:深度遍历二叉树

js代码:
//allSteps :用于存放移动的每一步骤
let allSteps=[];

/*
* 移动盘子的递归函数
* @param {number} n 当前处理的盘子
* @param {string} a , b ,c 代表当前的三根柱子
*/
function move(n,a,b,c){
  if(n===1){
    allSteps.push({
      n:n,
      from:a,
      to:c
    })
  }else{
    move(n-1,a,c,b);
    allSteps.push({
      n:n,
      from:a,
      to:c
    });
    move(n-1,b,a,c);
  }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108626.html

相关文章

  • 堆栈的应用——用JavaScript描述数据结构

    摘要:一实现一个栈类基于堆栈的特性,可以用数组做线性表进行存储。出栈出栈同样是利用数组的方法,在数组尾部推出数据。聚合最后,将所有功能聚合后,如下所示,一个堆栈的数据结构就搞定了。堆栈的经典算法应用,首推就是汉诺塔。 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。 一、实现一个栈类Stack 基于堆...

    Hydrogen 评论0 收藏0
  • 【程序员必会十大算法】之分治算法(汉诺问题)

    摘要:应用分治法是一种很重要的算法。字面上的解释是分而治之,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。 ...

    codecraft 评论0 收藏0
  • 用自定义的拖放实现一个汉诺游戏

    摘要:做这个汉诺塔游戏的想法,来自于几个月前做百度第一期的一个题目,题目要求在两个容器间实现子元素的相互拖拽效果。重构好的代码我放上了,实现的效果可见其,一起玩玩呗,觉得好玩记得给哈 做这个汉诺塔游戏的想法,来自于几个月前做百度IFE第一期的一个题目,题目要求在两个容器间实现子元素的相互拖拽效果。当时我就突发奇想:容器看成柱子,子元素看成盘子,再加一点限制底下盘子移动的判断和胜负的判断,不就...

    amc 评论0 收藏0
  • 数据结构与算法之汉诺问题(Java递归)

    摘要:汉诺塔问题有三根柱子,源杆,暂存杆,目的杆上有层盘子,由小到大向下排列,现需要将杆的盘子移到杆中要求大的盘在下面,小的盘在上面一次只能移动一个盘子个人思路先分析问题,用数学的归纳法当只有一个盘时,直接移动当有两个盘时,先将小的移到暂存杆,再 汉诺塔问题: 有三根柱子,源杆A,暂存杆temp,目的杆C A上有n层盘子,由小到大向下排列,现需要将A杆的盘子移到C杆中 ...

    yuxue 评论0 收藏0
  • 汉诺算法

    摘要:汉诺塔问题描述有三个圆柱,其中上从上至下放置了从小到大个圆盘,一次只能移动一个圆盘,且大的圆盘不能放在小圆盘之上,要求打印出从将圆盘移到的方案。 汉诺塔问题描述:有A, B, C三个圆柱,其中A上从上至下放置了从小到大n个圆盘,一次只能移动一个圆盘,且大的圆盘不能放在小圆盘之上,要求打印出从A将圆盘移到C的方案。 当n = 1时, A->C当n = 2时, A->B, A->C, B-...

    UsherChen 评论0 收藏0

发表评论

0条评论

fredshare

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<