汉诺塔动态演示程序.doc

汉诺塔动态演示程序.doc

ID:51530202

大小:86.50 KB

页数:5页

时间:2020-03-12

汉诺塔动态演示程序.doc_第1页
汉诺塔动态演示程序.doc_第2页
汉诺塔动态演示程序.doc_第3页
汉诺塔动态演示程序.doc_第4页
汉诺塔动态演示程序.doc_第5页
资源描述:

《汉诺塔动态演示程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、汉诺塔递归算法C语言动态演示 汉诺塔递归算法具体演示功能:   ①任意输入演示的个数;   ②选择电脑自动演示和手动单步执行两种方式;   ③若选择电脑自动演示请输入速度;   ④屏幕上显示算法执行过程。演示算法流程图:汉诺塔模块编码: 汉诺塔问题是一个经典的递归问题。它给出的圆盘移动条件是:一次仅能移动一个盘,且不允许大盘放在小盘的上面[1]。算法演示思想[10]:设要解决的的汉诺塔共有N个圆盘,对A杆上的全部N个圆盘从小到大顺序编号,最小的圆盘为1号,次之为2号,依次类推,则最下面的圆盘的编号为N。第一步:先将问

2、题简化。假设A杆上只有一个圆盘,即汉诺塔只有一层N1,则只要将1号盘从A杆上移到B杆上即可。 第二步:对於一个有N(N>1)个圆盘的汉诺塔,将N个圆盘分成两部分:上面的N-1个圆盘和最下面的N号圆盘。 第三步:将“上面的N-1个圆盘”看成一个整体,为了解决N个圆盘的汉诺塔,可以按下面图示的方式迳行操作:1、将A杆上面的N-1个盘子,借助B杆,移到C杆上;  2、将A杆上剩余的N号盘子移到B杆上; 3、 将C杆上的N-1个盘子,借助A杆,移到B杆上。 按照上面的想法,我们要演示的就是具体的移盘操作。关键技术:画盘子、

3、移盘、显示移盘步骤实现步骤:1、画盘子;   2、移盘、显示移盘步骤。核心代码实现如下:n        画盘子首先定义一下盘子的结构:structH{  intdata[15];/*存放每个盘的代号*/  inttop;/*每个塔的具体高度*/}num[3];/*三个塔*/ 接下来要定义一些标志变量来判断运行方式,比如:intcomputer=1;/*自动控制与手动控制的标志*/intspeed=0;/*全局变量speed主要是演示过程的速度*/然后要处理输入数据越界的情况,因为盘子个数过多,将很难实现,因此这里以

4、0

5、

6、n>10)     n=10;/*越界的话n当10处理*/… 下面来开始画盘子:首先初始化三个地方塔的高度,代码如下:… for(i=0;i<3;i++)     num[i].top=-1;/*三个地方的高度开始都为-1*/  …然后画一开始的塔座A上的盘子,代码如下:…for(i=0;i

7、um[0].top]=i;/*最大的盘子代号为0,依次为1,2,…n-1*/       color=num[0].data[num[0].top]+1;/*盘子的颜色代码为栈顶盘子代号加1*/       setfillstyle(SOLID_FILL,color);       bar(100-(33-3*num[0].data[num[0].top]),400-20*i-8,100+(33-3*num[0].data[num[0].top]),400-20*i+8);/*画矩形*/     }       se

8、tcolor(YELLOW);       outtextxy(180,450,"anykeytocontinue");       settextstyle(0,0,2);       outtextxy(90,420,"A");/*塔座标志*/       outtextxy(240,420,"B"); outtextxy(390,420,"C"); …n        移盘、显示移盘步骤接下来要做的解决移盘问题并显示移盘步骤,这个过程的代码如下:…inti;    charnum1[3],num2[3];   

9、 sprintf(num1,"%c",x-32);/*将小写变成大写,并转换成字符串输出*/    sprintf(num2,"%c",y-32);    setfillstyle(SOLID_FILL,BLACK);/*把原来的地方移去涂黑*/    bar(0,0,640,60);    setcolor(RED);    outtextxy(150,30,num1);/*输出移动过程*/    outtextxy(200,30,"--->");    outtextxy(310,30,num2);    set

10、textstyle(0,0,2);    setfillstyle(SOLID_FILL,BLACK);/*把原来的地方移去涂黑*/    bar(100+150*(x-97)-(33-3*num[x-97].data[num[x-97].top]),400-20*num[x-97].top-8,100+150*(x-97)+(33-3*num

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

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

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