您的位置:首页 > 其它

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

2006-02-28 19:57 246 查看
九连环简介

九连环游戏是中国人自己发明的,它的历史非常悠久,据说起源于战国时期。九连环主要是由一个框架和九个圆环组成:每个圆环上连有一个直杆,而这个直杆则在后面一个圆环内穿过,九个直杆的另一端用一块木板或圆环相对固定。

九连环规律

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

拆解/安装的过程

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

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

递归算法

本算法逻辑适用任意个数的连环问题,于2002年11月6日设计,2006年2月28日修改如下

#include<iostream>

using namespace std;

class Ring

{

public:

Ring(int Num):RingNum(Num){}

void StartDown();

void StartUp();

private:

int RingNum;

void DownRing(int n);

void UpRing(int n);

};

void Ring::DownRing(int n)

{

if(n>2) DownRing(n-2);

cout<<"下第"<<n<<"环";

if(n>2) UpRing(n-2);

if(n>1) DownRing(n-1);

}

void Ring::UpRing(int n)

{

if(n>1) UpRing(n-1);

if(n>2) DownRing(n-2);

cout<<"上第"<<n<<"环";

if(n>2) UpRing(n-2);

}

void Ring::StartDown()

{

DownRing(RingNum);

}

void Ring::StartUp()

{

UpRing(RingNum);

}

int main()

{

Ring RingN(9);

RingN.StartDown();

RingN.StartUp();

return 0;

}

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

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: