知识库 人物 历史 地理 自然 文化 艺术 社会 科学 技术 教育 生活 体育 企业 银行 组织 官职 外交 联合国 博物馆 基金会 纪念馆 军事组织 组织机构 职能部门 诺贝尔奖 汉族 民俗 风俗 婚俗 姓氏 习俗 百家姓
  汉诺塔           

汉诺塔

汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。解答结果请自己运行计算,程序见尾部。面对庞大的数字(移动圆片的次数)18446744073709551615,看来,众僧们耗尽毕生精力也不可能完成金片的移动。

后来,这个传说就演变为汉诺塔游戏:

1.有三根杆子A,B,C。A杆上有若干碟子  
2.每次移动一块碟子,小的只能叠在大的上面  
3.把所有碟子从A杆全部移到C杆上

经过研究发现,汉诺塔的破解很简单,就是按照移动规则向一个方向移动金片:
如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C

此外,汉诺塔问题也是程序设计中的经典递归问题。

补充:汉诺塔的算法实现(c++)
#include <fstream>
#include <iostream>
using namespace std;

ofstream fout("out.txt");

void Move(int n,char x,char y)
{
        fout<<"把"<<n<<"号从"<<x<<"挪动到"<<y<<endl;
}

void Hannoi(int n,char a,char b,char c)
{
        if(n==1)
                Move(1,a,c);
        else
        {
                Hannoi(n-1,a,c,b);
                Move(n,a,c);
                Hannoi(n-1,b,a,c);
        }
}

int main()
{
        fout<<"以下是7层汉诺塔的解法:"<<endl;
        Hannoi(7,'a','b','c');
        fout.close();
        cout<<"输出完毕!"<<endl;
        return 0;
}

如果你的机子足够快,硬盘160G以上的化,可以把以上的程序改成64,运行完毕就是64汉诺塔的解法了。

上一篇:知识:四味水晶牦牛耳  下一篇:知识:麻辣臭豆腐
∷排行知识文章∷ ∷推荐知识文章∷
· 腊味煲仔饭
· 蓝带啤酒
· 秋收起义文家市会师旧址
· 邓从豪
· 船山风景区
· 影艺学院片门
· 新罕布什尔州
· 同里古镇
· 心静自然凉
· 合成技术
· 马文熙
· 木桶理论
· 贾真
· 宁氏鳝丝
· 沙捞越海豚
· 池杉
· 故剑情深
· 基诺族服饰
· 卜世臣
· 邓碧珊
· 云县
· BtoC
· 每股资产净值
· 福清
Copyright © 2006-2008 版权所有 中华知识库
本站资源均来源于网络,如侵犯了您的版权,请来信告知,我们将立即改正!
信箱: QQ:26655353 粤ICP备05006761号

 股票 贸易 钱币 铸币 税收 营销 证券 流行 另类 涂鸦 饰品 模特 茶道 纹身 手绘 暴走 自拍 品牌