河内塔攻略

有三根柱子,其中一个柱子上有从上到下从小到大若干个空心圆环,现在需要将该柱子上的所有圆环还是按照从上到下从小到大的顺序,放置到另外一根柱子上。如图所示:


每次移动的规则如下:

  1. 一次只能移动一个圆环;
  2. 有叠加时,序号小的圆环只能放在序号大的圆环上,比如4号只能放在5号上,3号可以放在4号或者5号上,2号不能放在1号上;
这里以三个圆环为例进行一个简单移动实例,比如我们将柱一上的所有圆环移动到柱二上,则整个流程如下:

最后只需要将柱一上面的1号圆环放到柱二上即可。

从整个过程上看,很多的移动是固定的。比如说从步骤a到步骤b,当1号圆环移动后,2号圆环只能移动到柱三,并且下一个步骤c中,柱二上面的1号圆环只能移动到柱三上面的2号圆环上,不然3号圆环无法移动到柱二上。所以移动之后,很多步骤都是固定的,需要注意的只是第一次移动时,上面的圆环移动到哪个柱子上。
比如现在考虑有五个圆环,那么在开始移动时,最上面的1号圆环是移动到柱二,还是移动到柱三?如果不后悔地往下移动,第一次将1号圆环移动到柱二和移动到柱三,结果是不一样的。为了避免移动步骤不反悔,需要很确定知道1号圆环是移动到柱三还是柱二。

现在反过来思考,如果我要将所有的圆环从柱一全部移动到柱二,那么,肯定会有如下所示的一个步骤:


因为目的是将所有的圆环移动到柱二,所以为了尽量少的移动圆环,最大的5号圆环肯定只用移动一次,也就是这个时候,柱一上面只有5号圆环,柱二上面没有圆环,柱三上面按照顺序排好1-4号圆环。上面这个图的步骤是肯定存在的,对吧,不然最底下的5号圆环移动不了。既然这一个步骤肯定存在,那么如何达到这个步骤呢?也就是必须要将1-4号所有圆环按照顺序都放到柱三上面。现在继续从后往前推。

如果要使得1-4的所有圆环在柱三上排列好,那么也必然会存在如下的一个步骤:


这个图中就是清空柱三,好让4号圆环放到柱三上面,而此时柱二就需要保证1-3号圆环的顺序排列。

现在来分析一下:类似于1、2、3号圆环,因为比较小,没有什么说话的权利,所以一般要移动很多步骤;而最大的5号圆环很厉害,大家都要让路,所以移动5号圆环时,柱二是需要清空的,并且4号圆环需要到柱三上面躲避。序号越大,移动的次数越少。5号圆环整体来说只移动了一次,就是从柱一到柱二;4号圆环移动了两次,就是先从柱一移动到柱三,再移动到柱二,其中一次是需要躲避5号圆环。
总结而言就是:最大的5号圆环从柱一移动到柱二时,4号圆环是需要在柱三上面的;而4号圆环从柱一移动到柱三时,次一点的3号圆环是需要在柱二的。因为4号圆环是从柱一移动过来的,所以1-3号圆环必定整齐排放在柱二上面。继续往下推,就是3号圆环当初从柱一移动到柱二时,2号圆环必定在柱三上面。那么2号圆环从柱一移动到柱三时,1号圆环就一定是在柱二上面。故可以断定,如果要将所有的圆环从柱一全部移动到柱二,最开始移动时,是将1号圆环移动到柱二,而不是柱三。

上面的分析是确定最开始移动时最小圆环的移动方向。那么如何完成所有的步骤?
分为两步,第一步是先确定较大的圆环需要放在哪个柱子上,第二步是每一次移动一个圆环,就需要将小于该圆环的所有圆环在该圆环上依次排序好。
以5个圆环为例:首先,确定较大圆环需要放到哪个柱子,5号圆环需要放在柱二,4号柱三,3号柱二,2号柱三;然后将2号圆环放到柱三,并把序号小于2的排好序放在2号圆环上;接着将3号放到柱二,并把序号小于3的排好序放在3号上;接着将4号放到柱三,并把序号小于4的圆环按顺序放到4号上;接着将5号放到柱二,并将序号小于5的按顺序放到5号上,完成。在第二部分把小序号圆环按顺序拍好时就需要用到上文中的分析结果。

圆环增加时,步骤基本都是相类似的,只需要知道哪个圆环对应哪个柱子,如何移动圆环就可以。

移动的最少步骤数 f 和圆环个数 n 的关系是:f(n) = 2^n - 1

希望对你有帮助。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值