- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于递归算法Hanoi Tower动画演示系统
基于递归算法Hanoi Tower动画演示系统 传统的汉诺塔递归算法需要四个参数。改进后的算法为三个参数,使函数接口更简单易用。汉诺塔的动画演示系统采用了采取离散点的方式展示塔盘在移动过程中动画。动画采取塔盘移动中间路径的有限个点进行模拟动画移动的过程,提高动画演示程序运行的效率。移动塔盘的过程中会遇到中间塔影响,应当移动路径应当跳过中间塔。一次移动动画离散取点个数为10-15个,可模拟出真实的移动效果
【关键词】递归算法 Hanoi Tower动画演示系统
1 Hanoi Tower问题以及传统的递归算法的解法
汉诺塔问题源自印度神话,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。常见求解此问题的递归函数为void hanoi(intn,charX,charY,charZ),需要四个参数,即移动的盘子数量n,移动的发源地X塔,移动途径Y塔,移动的目的地Z塔,其中变量X,Y,Z都是字符型变量,取值范围为{A’,’B’,’C’}
2 改进后的汉诺塔问题递归算法
传统的算法求解汉诺塔问题函数有四个参数,第三个参数即移动途经的Y塔。这个参数可以省略,因为总共有三个塔,比如塔的名字为甲塔,乙塔,丙塔,假设移动的个数大于1,从甲塔移动到乙塔必然可以推测出借助丙塔。塔的名字为X塔,Y塔,Z塔,假设移动的个数大于1,从X塔移动到Y塔必然可以推测出必借助Z塔 , 从X塔移动到Z塔必然可以推测出必借助Y塔, 从Y塔移动到X塔必然可以推测出借助必Z塔, 从Y塔移动到Z塔必然可以推测出必借助X塔。从Z塔移动到X塔必然可以推测出借助必Y塔, 从Z塔移动到Y塔必然可以推测出必借助X塔。所以新的递归算法就是去掉变量char Y.通过X塔和Z塔可以计算出途径过哪座塔.改进后的汉诺塔函数声明为void han (char x, char y ,inti);函数定义为:
voidhan (char x, char y ,inti)
{
if(i1)
{
han(x,(char)(3*’B’-x-y), i-1);
han(x , y , 1);
han((char)(3*’B’-x-y) ,y, i-1);
}
else
{ printf(“%c ---%c “, x , y );
move(x , y ); push(y , readtop(x));
pull(x);
show();
Sleep(1000);
}
}
其中途?降乃?通过表达式3*’B’-x-y计算出来。用三个塔的字母之和减去已知的两座塔字母和可以得到第三座塔的字母。因为x,y,z三个参数的取值为字符A’, ’B’, ’C’,他们的和是3倍的B’所以途径的塔通过表达式3*’B’-x-y计算出来
改进的汉诺塔演示系统开发工具为VC++6.0,使用C语言。程序头文件包含了stdio.h,windows.h以及math.h。使用的库函数有五个,分别为:声明于stdio头文件中的函数getchar(),printf(),以及声明于Windows头文件的GetStdHandle(),SetConsoleCursorPosition(),Sleep().
由于汉诺塔的计算量是以汉诺塔的层数的指数函数,超过10层的汉诺塔计算量已经很大,为量演示方便特设置汉诺塔演示系统的塔的高度小于10. 考虑到方便演示问题,可以定义全局整型常量MaxHigh为汉诺塔的最大高度,数值为5。同时可以定义全局整型常量MaxWidth为汉诺塔最大宽度。MaxHighMaxWidth可设置均设置5。使用若干个符号横向排列模拟汉诺塔上的盘子。汉诺塔的底盘用直线段绘制,如图1所示
定义全局整型数组Mtrix[3][MaxHigh+1]用于存储三座塔(A塔,B塔,C塔)的从低到高各层盘子的大小.,其中一维数组Mtrix[0]用于存放A塔各层盘子的大小,Mtrix[1]用于存放B塔各层盘子的大小,Mtrix[0]用于存放C塔各层盘子的大小。例如:Mtrix[0][1]表示A塔的第一层(即底层)盘子的大小;Mtrix[0][4]表示A塔的第4层上盘子的大小;Mtrix[1][2]表示B塔的第2层上盘子的大小;Mtrix[2][3]表示C塔的第3层上盘子的大小.但是三个一维数组的首元素不用来保存盘子的大小,而用来保存每个塔的最大有效高度,即每个塔上有盘子的层数。例如:Mtrix[0][0]表示A塔的盘子的层数,Mtrix[1
您可能关注的文档
最近下载
- (高清版)B-T 19889.7-2022 声学 建筑和建筑构件隔声测量 第7部分:撞击声隔声的现场测量.pdf VIP
- lesson8日语综合教程(第六册).ppt VIP
- 汽修资料-4JB1-VE泵柴油发动机维修手册.pdf VIP
- 2025年城市地铁轨道交通考试题库(附答案).pdf VIP
- 第五章焦炭工业分析.doc VIP
- 初中英语语法专题(精品讲练结合附答案.pdf VIP
- 2023年注册安全工程师《安全生产管理》.docx VIP
- 2025最新中国红十字会救护员培训理论考试试题+答案.docx VIP
- 轨道交通专业知识竞赛题库资料(职业技能竞赛通用)-600题(含各题型).pdf VIP
- ct室防护施工合同7篇.docx VIP
文档评论(0)