分享

9连环----向C++进军

 neverdeady 2010-09-29

九连环

[摘 要]本文简单介绍了中国传统的智力游戏--九连环,分析的其中的规律,给出了解决问题
的算法。
[关键词]九连环、N连环、递归、拆解、安装

一、九连环简介

九连环游戏是中国人自己发明的,它的历史非常悠久,据说是起源于战国时期。

九连环主要是由一个框架和九个圆环组成:每个圆环上连有一个直杆,而这个直杆则在
后面一个圆环内穿过,九个直杆的另一端用一块木板或圆环相对固定。

二、九连环的规律

通过玩九连环你就会发现存在这样一个规律:

(1)第 1 环可以自由上下
(2)而上/下第 n 环时(n>1),则必须满足:
(a)第 n-1 个环在架上
(b)前 n-2 个环全部在架下

三、拆解/安装的过程

正确的拆解是先以第 9 环为目标,先拆下它,简化为拆一个 8 连环。接着再也第 8 环
为目标,拆下它,简化为拆一个 7 连环。以此类推,直至全部拆解。

其实安装和拆解是一个道理,因为他们均是使用上面说的规律来完成的。
正确是安装也是先以第 9 环为目标,先装上它,简化为装一个 8 连环。接着再也第 8
环为目标,装上它,简化为装一个 7 连环。以此类推,直至全部安装。
当然,现在这么说是便于理解,当你深刻的理解了上面所说的规律后,就会发现,安装
上第 9 环后,问题可以被简化为装一个 7 连环,而当装上第 7 环后,问题就被简化为装一
个 5 连环了,呵呵,就是这样的,不知道你现在是否明白我的意思……

四、一个猜想

仔细观察九连环的结构、思考九连环的规律及拆解/安装的过程,你是不是有一种感觉:
九连环跟递归一定有联系。你看,递归的基本思想是把一个大的问题分解为一个规模较小的问
题,从这些较小问题的解,构造出大问题的解,而这些规模较小的问题,用同样的方法分解成
更小的问题,从更小问题的解,构造出较小的问题,一层层下去,一般最后总是可以分解到可
以直接求解的小问题。嘿嘿,九连环的拆解/安装多么的符合这个规律啊……^_^

五、算法实现

以下是算法实现,程序写的很简洁,省略了很多功能的实现,比如计数等,如果你觉得
有必要的话,可以自行添加上去,我相信很容易,并不要很多的改动。

The C Code Here:
void UpRing(); /*加上函数说明,否则编译将会出一点小错误*/

void DownRing(int n) /*下环的逻辑就体现在这里*/
{
if(n>2) DownRing(n-2);
printf("下第%d环\n",n);
if(n>2) UpRing(n-2);
if(n>1) DownRing(n-1);
}

void UpRing(int n) /*上环的逻辑则体现在这里*/
{
if(n>1) UpRing(n-1);
if(n>2) DownRing(n-2);
printf("上第%d环\n",n);
if(n>2) UpRing(n-2);
}

void main() /*简洁的主函数*/
{
printf("拆解\n");
DownRing(9);
printf("安装\n");
UpRing(9);
printf("结束\n");
}
九连环的拆解原理
解开九连环共需要256步,只要上或下一个环,就算一步,不是在框架上滑动。希望大家能够通过独立思考,解决这个问题。九连环的解下和套上是一对逆过程。
  九连环的每个环互相制约,只有第一环能够自由上下。要想下/上第n个环,就必须满足两个条件,第一个环除外。一、第n-1个环在架上;二、第n-1个环前面的环全部不在架上。玩九连环就是要努力满足上面的两个条件。解下九连环本质上要从后面的环开始下,而先下前面的环,是为了下后面的环,前面的环还要装上,不算是真正地取下来。
  要想解下第九环,必须满足以下两个条件:第九环在架上;而第一~八环全部不在架上。在初始状态,前者是满足的,现在要满足后者。照这样推理,就要下第七八环,一直推出要下第一环,而不是下第二环。先下第二环是偶数连环的解法。上下第二环后就要上下第一环,所以在实际操作中就同时上下第一、二环,这是两步。
  九连环在任何正常状态时,都只有两条路可走:上某环和下某环,别的环动不了。其中一条路是刚才走过来的,不能重复走,否则就弄回去了。这样,就会迫使连环者去走正确的道路。而很多人由于不熟悉,常走回头路,解不了九连环。首次解九连环要多思考,三个环上下的动作要练熟,记住上中有下,下中有上。熟练后会有更深刻的理解,不需要推理了。
  最难的九连环的形式是只有9环在上,需512步全解下。
具体拆解方法:
把框架和九个圆环分开,如左手持框架柄,右手握环,从右到左编号为1-9将环套入框架为“上”,取出为“下”。
  九连环拆解共341步:
  下9:
  下1(结果98765432在上):下1
  下3(结果987654在上):下3上1下12
  下5(结果9876在上):下5上12下1上3上1下12下4上12下1下3上1下12
  下7(结果98在上):下7上12下1上3上1下12上4上12下1下3上1下12上5上12下1上3上1下12下4上12下1下3上1下12下6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12
  下9(结果8在上):下9;
  九连环的解法下8:
  上2(结果82在上):上12下1
  上3(结果83在上):上3上1下12
  上4(结果84在上):上4上12下1下3上1下12
  上5(结果85在上):上5上12下1上3上1下12下4上12下1下3上1下12
  上6(结果86在上):上6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12
  上7(结果87在上):上7上12下1上3上1下12上4上12下1下3上1下12上5上12下1上3上1下12下4上12下1下3上1下12下6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12
  下8(结果7在上):下8;
  下7:
  上2(结果72在上):上12下1
  上3(结果73在上):上3上1下12
  上4(结果74在上):上4上12下1下3上1下12
  上5(结果75在上):上5上12下1上3上1下12下4上12下1下3上1下12
  上6(结果76在上):上6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12
  下7(结果6在上):下7;
  下6:
  上2(结果62在上):上12下1
  上3(结果63在上):上3上1下12
  上4(结果64在上):上4上12下1下3上1下12
  上5(结果65在上):上5上12下1上3上1下12下4上12下1下3上1下12
  下6(结果5在上):下6;
  下5:
  上2(结果52在上):上12下1
  上3(结果53在上):上3上1下12
  上4(结果54在上):上4上12下1下3上1下12
  下5(结果4在上):下5;
  下4:
  上2(结果42在上):上12下1
  上3(结果43在上):上3上1下12
  下4(结果3在上):下4;
  下3:
  上2(结果32在上):上12下1
  下3(结果2在上):下3;
  下12:
  下12(结果拆解完成):上1下12。
  九连环安装共341步:
  上98:
  上2(结果2在上):上12下1
  上3(结果3在上):上3上1下12
  上4(结果4在上):上4上12下1下3上1下12
  上5(结果5在上):上5上12下1上3上1下12下4上12下1下3上1下12
  上6(结果6在上):上6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12
  上7(结果7在上):上7上12下1上3上1下12上4上12下1下3上1下12上5上12下1上3上1下12下4上12下1下3上1下12下6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12
  上8(结果8在上):上8上12下1上3上1下12上4上12下1下3上1下12上5上12下1上3上1下12下4上12下1下3上1下12上6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12下7上12下1上3上1下12上4上12下1下3上1下12上5上12下1上3上1下12下4上12下1下3上1下12下6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12
  上9(结果98在上):上9
  上76:
  九连环的解法上2(结果982在上):上12下1
  上3(结果983在上):上3上1下12
  上4(结果984在上):上上4上12下1下3上1下12
  上5(结果985在上):上5上12下1上3上1下12下4上12下1下3上1下12
  上6(结果986在上):上6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12
  上7(结果9876在上):上7
  上54:
  上2(结果98762在上):上12下1
  上3(结果98763在上):上3上1下12
  上4(结果98764在上):上4上12下1下3上1下12
  上5(结果987654在上):上5
  上32:
  上2(结果9876542在上):上12下1
  上3(结果9876532在上):上3
  上1:
  上1(结果安装完成):上1。
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多