汉诺塔游戏研究

来源:互联网 发布:c语言strcat函数实现 编辑:程序博客网 时间:2024/06/08 12:00

汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着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

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

  算法思路:

  1.如果只有一个金片,则把该金片从源移动到目标棒,结束。

  2.如果有n个金片,则把前n-1个金片移动到辅助的棒,然后把自己移动到目标棒,最后再把前n-1个移动到目标棒.

  3.单纯对于有N个金片要挪动的步数求出, 可以使用递推方法,满足递推方程f(i) = f(i - 1) * 2 + 1.

     今天,自己照着这个思路编了个C++程序,发现其实需要移动的次数和层数的关系是:2的层数次方-1。程序如下:

#include <iostream.h>

void move(char a,char c)
{
 static long count=0;
 count++;
 cout<<"第"<<count<<"次:"<<a<<"->"<<c<<endl;
}

void hannuota(int num,char a,char b,char c)
{
 if (num==1)
  move(a,c);
 else
 {
  hannuota(num-1,a,c,b);
  move(a,c);
  hannuota(num-1,b,a,c);
 }
}

void main()
{
 int num;
 char a='a',b='b',c='c';
 cout<<"请输入汉诺塔的层数:"<<endl;
 cin>>num;
 hannuota(num,a,b,c);
}

 

运行结果举例如下:

 

请输入汉诺塔的层数:
3
第1次:a->c
第2次:a->b
第3次:c->b
第4次:a->c
第5次:b->a
第6次:b->c
第7次:a->c

 


请输入汉诺塔的层数:
8
第1次:a->b
第2次:a->c
第3次:b->c
第4次:a->b
第5次:c->a
第6次:c->b
第7次:a->b
第8次:a->c
第9次:b->c
第10次:b->a
第11次:c->a
第12次:b->c
第13次:a->b
第14次:a->c
第15次:b->c
第16次:a->b
第17次:c->a
第18次:c->b
第19次:a->b
第20次:c->a
第21次:b->c
第22次:b->a
第23次:c->a
第24次:c->b
第25次:a->b
第26次:a->c
第27次:b->c
第28次:a->b
第29次:c->a
第30次:c->b
第31次:a->b
第32次:a->c
第33次:b->c
第34次:b->a
第35次:c->a
第36次:b->c
第37次:a->b
第38次:a->c
第39次:b->c
第40次:b->a
第41次:c->a
第42次:c->b
第43次:a->b
第44次:c->a
第45次:b->c
第46次:b->a
第47次:c->a
第48次:b->c
第49次:a->b
第50次:a->c
第51次:b->c
第52次:a->b
第53次:c->a
第54次:c->b
第55次:a->b
第56次:a->c
第57次:b->c
第58次:b->a
第59次:c->a
第60次:b->c
第61次:a->b
第62次:a->c
第63次:b->c
第64次:a->b
第65次:c->a
第66次:c->b
第67次:a->b
第68次:c->a
第69次:b->c
第70次:b->a
第71次:c->a
第72次:c->b
第73次:a->b
第74次:a->c
第75次:b->c
第76次:a->b
第77次:c->a
第78次:c->b
第79次:a->b
第80次:c->a
第81次:b->c
第82次:b->a
第83次:c->a
第84次:b->c
第85次:a->b
第86次:a->c
第87次:b->c
第88次:b->a
第89次:c->a
第90次:c->b
第91次:a->b
第92次:c->a
第93次:b->c
第94次:b->a
第95次:c->a
第96次:c->b
第97次:a->b
第98次:a->c
第99次:b->c
第100次:a->b
第101次:c->a
第102次:c->b
第103次:a->b
第104次:a->c
第105次:b->c
第106次:b->a
第107次:c->a
第108次:b->c
第109次:a->b
第110次:a->c
第111次:b->c
第112次:a->b
第113次:c->a
第114次:c->b
第115次:a->b
第116次:c->a
第117次:b->c
第118次:b->a
第119次:c->a
第120次:c->b
第121次:a->b
第122次:a->c
第123次:b->c
第124次:a->b
第125次:c->a
第126次:c->b
第127次:a->b
第128次:a->c
第129次:b->c
第130次:b->a
第131次:c->a
第132次:b->c
第133次:a->b
第134次:a->c
第135次:b->c
第136次:b->a
第137次:c->a
第138次:c->b
第139次:a->b
第140次:c->a
第141次:b->c
第142次:b->a
第143次:c->a
第144次:b->c
第145次:a->b
第146次:a->c
第147次:b->c
第148次:a->b
第149次:c->a
第150次:c->b
第151次:a->b
第152次:a->c
第153次:b->c
第154次:b->a
第155次:c->a
第156次:b->c
第157次:a->b
第158次:a->c
第159次:b->c
第160次:b->a
第161次:c->a
第162次:c->b
第163次:a->b
第164次:c->a
第165次:b->c
第166次:b->a
第167次:c->a
第168次:c->b
第169次:a->b
第170次:a->c
第171次:b->c
第172次:a->b
第173次:c->a
第174次:c->b
第175次:a->b
第176次:c->a
第177次:b->c
第178次:b->a
第179次:c->a
第180次:b->c
第181次:a->b
第182次:a->c
第183次:b->c
第184次:b->a
第185次:c->a
第186次:c->b
第187次:a->b
第188次:c->a
第189次:b->c
第190次:b->a
第191次:c->a
第192次:b->c
第193次:a->b
第194次:a->c
第195次:b->c
第196次:a->b
第197次:c->a
第198次:c->b
第199次:a->b
第200次:a->c
第201次:b->c
第202次:b->a
第203次:c->a
第204次:b->c
第205次:a->b
第206次:a->c
第207次:b->c
第208次:a->b
第209次:c->a
第210次:c->b
第211次:a->b
第212次:c->a
第213次:b->c
第214次:b->a
第215次:c->a
第216次:c->b
第217次:a->b
第218次:a->c
第219次:b->c
第220次:a->b
第221次:c->a
第222次:c->b
第223次:a->b
第224次:a->c
第225次:b->c
第226次:b->a
第227次:c->a
第228次:b->c
第229次:a->b
第230次:a->c
第231次:b->c
第232次:b->a
第233次:c->a
第234次:c->b
第235次:a->b
第236次:c->a
第237次:b->c
第238次:b->a
第239次:c->a
第240次:b->c
第241次:a->b
第242次:a->c
第243次:b->c
第244次:a->b
第245次:c->a
第246次:c->b
第247次:a->b
第248次:a->c
第249次:b->c
第250次:b->a
第251次:c->a
第252次:b->c
第253次:a->b
第254次:a->c
第255次:b->c

 

看来确实是个指数级增长的问题。。。

嘿嘿以后玩这个游戏就可以作弊了,哈哈

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 被小人陷害又无计可施怎么办 蚂蚁借呗2万逾期怎么办 蚂蚁借呗还款金额受限怎么办 蚂蚁借呗不能借钱了怎么办 美柚手机号换了怎么办 美柚他他圈被禁言了怎么办? 被蝎子蜇了屁股怎么办 被蝎子蛰了该怎么办 孕妇让蝎子蛰了怎么办 脸被蝎子蛰了怎么办 皮肤看着有点老怎么办 王者铭文被卖了怎么办 游戏cp送我皮肤怎么办 消防改革武警学院的学员怎么办 几把毛掉的厉害怎么办 从公务员调入事业单位的怎么办 电车被城管扣了怎么办 超变战陀发射器绳坏了怎么办 家里人总打击我怎么办干啥都要骂 欧陆风云4破产后怎么办 车被别人喷了漆怎么办 龙分期绑银行卡维护钱还不上怎么办 去维和要是伤了怎么办 头盔镜片刮花了怎么办 小牛u1钥匙丢了怎么办 非牛顿流体干了怎么办 刺激战场0信誉分怎么办 假如非牛顿干了怎么办? 退出id后照片了怎么办 小麦收割机麦糠有籽粒怎么办 在家带娃没钱花怎么办 看3d电影近视的怎么办 摩托车电瓶没电了怎么办 踏板摩托车电瓶没电了怎么办 摩托车离合油没了怎么办 论文数据计算错误该怎么办 脚被擦破皮了痛怎么办 脚撞到了很疼怎么办 腿不小心磕青了怎么办 木制椅子腿断了怎么办 实木椅子腿断了怎么办