中国传统智力游戏--九连环的递归算法,九连环算法(第1版)

原创 2002年12月06日 09:40:00

[摘   要]本文简单介绍了中国传统的智力游戏--九连环,分析了其中的规律,给出了解决问题的算法。
[关键词]九连环、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:

/****************************/
           任意 N 连环均适用
           日期:2002/11/6
           程序设计:道可道
           腾讯QQ:3908000
           电邮:Havelife@mail.csdn.net 
/****************************/


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");
}

 


2002年九连环算法第1版中国传统智力游戏--九连环的递归算法(九连环算法第1版)

2006年九连环算法第2版九连环的递归算法(九连环算法第2版)

2016年九连环算法第3版九连环算法(第3版)

智商200以上才能通关的小游戏“智慧翻转”的模拟运算程序

上周末+2个晚上,编写了“智慧翻转”对应的随机、递归、循环共3个版本的模拟程序,然后开通了博客,又等了3天,终于可以发布了。 建议在看以下代码之前,先去了解下这个游戏,至少明白规则,否则很难体会到其...
  • lhzx1541
  • lhzx1541
  • 2013年03月16日 22:32
  • 707

经典面试智力题200+题和解答

招聘时期到了,总少不了需要准备智力题。考来考去大多是各种旧题,本来是考智力的事情,现在几乎已经变成了题海战术的考试,所以我们也不能在这一块落后。学习各种奇巧淫技,扩展一下思路,同时免得笔试面试吃亏。 ...
  • csuzhaoqinghui
  • csuzhaoqinghui
  • 2016年08月03日 21:06
  • 6539

自动解决智能拼图,A*算法

接上一篇博客 生成可解的智能拼图后(具体方法参见: http://blog.csdn.net/realmagician/article/details/17395035)就要想办法找到自动解决的...
  • realmagician
  • realmagician
  • 2013年12月21日 11:15
  • 4776

HDU 5965 扫雷(递推)

扫雷 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submiss...
  • know_heng
  • know_heng
  • 2016年11月09日 11:00
  • 399

智力游戏(搬山游戏)

/**************************************** * File Name : game.c * Creat Data : 2015.1.30 * Auth...
  • qaz3171210
  • qaz3171210
  • 2015年01月31日 00:12
  • 301

小Y的智力游戏

题目描述 Description小Y最近迷上了一款智力游戏。(当然小Y还是很好学的) 这款智力游戏就是让你从 1 1 到 N N 这 N N 个数中,选取若干个不相等的正整数,使得它们的乘积为...
  • CuSO45H20
  • CuSO45H20
  • 2016年06月17日 09:52
  • 402

Vijos P1301 智力游戏

作为被智力游戏坑惨了的我,是不是已经是一个智障了?poi?挺有意思的回溯题。 【问题描述】   这是一个非常有趣的智力游戏,它规则简单而又变化多端。   游戏在一个m*n的方格里进行。游戏开...
  • qq_39439314
  • qq_39439314
  • 2017年07月24日 19:04
  • 129

智力游戏(常胜将军)

/**************************************** * File Name : game.c * Creat Data : 2015.1.30 * Auth...
  • qaz3171210
  • qaz3171210
  • 2015年01月31日 00:09
  • 398

【题解】新学期第一课!题目!

USACO 2015 US OPEN BRONZE   PROBLEM 1 MOOCRYPTION   众所不知的,奶牛们很喜欢玩智力游戏。John农夫最近发明了一个有趣的“找单词”游戏。 这...
  • Dream_Lolita
  • Dream_Lolita
  • 2016年08月08日 09:32
  • 346

智力游戏(黑白子交换)

/**************************************** * File Name : game.c * Creat Data : 2015.1.30 * Auth...
  • qaz3171210
  • qaz3171210
  • 2015年01月31日 00:07
  • 485
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:中国传统智力游戏--九连环的递归算法,九连环算法(第1版)
举报原因:
原因补充:

(最多只允许输入30个字)