基于递归算法的hanoi tower动画演示系统

基于递归算法的hanoi tower动画演示系统

ID:21481581

大小:28.50 KB

页数:7页

时间:2018-10-22

基于递归算法的hanoi tower动画演示系统_第1页
基于递归算法的hanoi tower动画演示系统_第2页
基于递归算法的hanoi tower动画演示系统_第3页
基于递归算法的hanoi tower动画演示系统_第4页
基于递归算法的hanoi tower动画演示系统_第5页
资源描述:

《基于递归算法的hanoi tower动画演示系统》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、基于递归算法的HanoiTower动画演示系统  传统的汉诺塔递归算法需要四个参数。改进后的算法为三个参数,使函数接口更简单易用。汉诺塔的动画演示系统采用了采取离散点的方式展示塔盘在移动过程中动画。动画采取塔盘移动中间路径的有限个点进行模拟动画移动的过程,提高动画演示程序运行的效率。移动塔盘的过程中会遇到中间塔影响,应当移动路径应当跳过中间塔。一次移动动画离散取点个数为10-15个,可模拟出真实的移动效果。  【关键词】递归算法HanoiTower动画演示系统  1HanoiTower问题以及传统的递归算法的解法  汉诺塔问题源自印度神话,大梵天创造世界的时候做了三根金刚石柱

2、子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。常见求解此问题的递归函数为voidhanoi(intn,charX,charY,charZ),需要四个参数,即移动的盘子数量n,移动的发源地X塔,移动途径Y塔,移动的目的地Z塔,其中变量X,Y,Z都是字符型变量,取值范围为{’A’,’B’,’C’}。  2改进后的汉诺塔问题递归算法  传统的算法求解汉诺塔问题函数有四个参数,第三个参数即移动途经的Y塔。这个参数可以省略,因为总共有三个塔,比

3、如塔的名字为甲塔,乙塔,丙塔,假设移动的个数大于1,从甲塔移动到乙塔必然可以推测出借助丙塔。塔的名字为X塔,Y塔,Z塔,假设移动的个数大于1,从X塔移动到Y塔必然可以推测出必借助Z塔,从X塔移动到Z塔必然可以推测出必借助Y塔,从Y塔移动到X塔必然可以推测出借助必Z塔,从Y塔移动到Z塔必然可以推测出必借助X塔。从Z塔移动到X塔必然可以推测出借助必Y塔,从Z塔移动到Y塔必然可以推测出必借助X塔。所以新的递归算法就是去掉变量charY.通过X塔和Z塔可以计算出途径过哪座塔.改进后的汉诺塔函数声明为voidhan(charx,chary,inti);函数定义为:  voidhan(c

4、harx,chary,inti)  {  if(i>1)  {  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’

5、,’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

6、.考虑到方便演示问题,可以定义全局整型常量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塔的第一层(即

7、底层)盘子的大小;Mtrix[0][4]表示A塔的第4层上盘子的大小;Mtrix[1][2]表示B塔的第2层上盘子的大小;Mtrix[2][3]表示C塔的第3层上盘子的大小.但是三个一维数组的首元素不用来保存盘子的大小,而用来保存每个塔的最大有效高度,即每个塔上有盘子的层数。例如:Mtrix[0][0]表示A塔的盘子的层数,Mtrix[1][0]表示B塔的盘子的层数,Mtrix[2][0]表示C塔的盘子的层数。盘子的层数小于等于全局常量MaxHigh。  全局整型变量Top表示演示塔的图像的垂直方向起始

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。