汉诺塔游戏研究
来源:互联网 发布: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
看来确实是个指数级增长的问题。。。
嘿嘿以后玩这个游戏就可以作弊了,哈哈
- 汉诺塔游戏研究
- 汉诺塔游戏算法研究
- 游戏可用性研究
- 分布式游戏引擎研究
- unity 手机游戏研究
- html5 游戏研究 参考
- 小队战术游戏研究:武器
- 游戏DX接管的研究
- 开始在业余时间研究游戏
- 严肃游戏的应用研究
- 游戏中寻路的问题研究
- (狼人杀)游戏研究-Android
- 从现在起,开始研究NDS游戏的开发
- 游戏对战平台研究终结篇
- 游戏对战平台研究终结
- 游戏对战平台研究终结篇
- 游戏编程中的寻路算法研究
- Orz游戏开发框架代码研究
- ehcache的使用(3)-- 应用
- 用SQL语句往Oralce中插入系统当前时间
- java.lang.OutOfMemoryError: Java heap space异常处理
- 位图介绍
- SQL Server2005-数据库热备份
- 汉诺塔游戏研究
- java中产生随机数的方法
- 字符串处理函数之strcpy
- SQL Server2005 - windows的二次登陆
- hibernate的配置文件默认的不是自动提交
- java字符编码原理解析
- Intel新概念手机变身家庭智能控制终端
- 金融危机下的求职与招聘
- asp.net下载文件