玩九连环

来源:互联网 发布:国际通用顶级域名 编辑:程序博客网 时间:2024/05/17 09:15

最近玩到了九连环,挺有趣的,用到的算法是递归。


首先发现的是,无论上环还是下环,都要从两横杠中间套上或放下。
套上是把某一环从两横杆中拉出, 往两横杆闭合处穿上;
放下是把某一环从两横杆闭合处拉出,往两横杆中放下。


紧接着,发现了两个规则:
1.一二环可以同时套上或放下;
2.要上或下某一环(设为n)时,必须第n-1环在架上,n-1环前面没有环在架上。


这样就不难发现,除了12环可以直接下,其他环都要转变(前面环都下完了):
下第n环  => 上第n-1环  => 上第n-2环  =>......=> 上第2环


举个例子,下第5环:
上2(结果52在上):上12下1
上3(结果53在上):上3上1下12
上4(结果54在上):上4上12下1下3上1下12
下5(结果4在上):下5
接下来,问题就变成下第4环了。


上环同理。


总之,解9连环,就是先解一个7连环,再解第9环,再上7连环,再解8连环......这就是递归了。

解第n环时,时刻记住两个条件:第n-1环在架上,n-1环前面没有环在架上。



网上说解9连环需要341步,它是一上或一下就称为一步,比较繁琐。其实12环完全可以直接上或下,这就少了很多步。

最后,我感觉比较好的解法是:下第1环,下3环,下2环,下5环,下4环,下7环,下6环,下9环,下8环。



刚开始解得时候有时会发现自己有点晕,忘了在解到哪一步,因为基层的环要解太多次了;解多几次就会坚定下来了。


鉴于博主语言表达能力有限,未详尽说明之处,望多加包含。

0 0