资源描述:
《人工智能(梵塔问题).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、下载可编辑梵塔问题实验报告实验目的1.熟悉和掌握问题规约法的原理、实质和规约过程2.理解规约图的表示方法3.熟悉并掌握递归解决问题的思想实验原理1.利用问题规约法的原理进行问题的分析与描述2.利用递归思想进行问题的解决实验条件1.WindowNT/xp/7及以上的操作系统2.内存在512M以上3.CPU在奔腾II以上实验内容梵塔问题源于印度古老的一个传说。相传开天辟地的神勃拉玛创造世界时在印度北部的佛教圣地的圣庙里,安放了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒
2、作为帮助,但每次只能搬一个,而且大的不能放在小的上面。值班僧侣按照法则日夜不停地搬运,当搬运完成时世界将在一声霹雳中毁灭。.专业.整理.下载可编辑实验分析我们假设把该任务交给一个僧人,为了方便叙述,将他编号为64。僧人自然会这样想:假如有另外一个僧人能有办法将63个盘子从一个座移到另一个座,那么问题就解决了,此时僧人64只需这样做:1.命令僧人63将63个盘子从A座移到C座2.自己将最底下的最大的一个盘子从A座移到C座3.再命令僧人63将63个盘子从B座移到C座为了解决将63个盘子从A座移到B座的问题,僧人63又想:如果能再有一个僧人62能将62个盘子移动到另一座,我就能将63个盘子从A座
3、移动到B座。他是这样做的:1.命令僧人62将62个盘子从A移动到C2.自己将一个盘子从A座移动到B座3.再命令僧人62将62个盘子移到B座再进行一次递归。如此“层层下放”,直到后来找到第2个僧人,让他完成将2个盘子从一个座移到另一个座,进行到此,问题就解决了。最后找到第1个僧人,让他完成将一个盘子从一个座移动到另一个座,至此,全部工作已经完成,该烦他问题得到解决。实验步骤⑴主程序流程图初始化过程绘制初始图形汉诺塔求解开始输入盘子数结束主程序流程图.专业.整理.下载可编辑⑴梵塔求解流程图开始将盘子从A座移到C座n为1?是否递归调用,初始n=n-1盘子数为n结束梵塔问题递归过程流程图退出一级调
4、用n=n+1程序代码#include#include#include#include#include#definePAOGAO190/*动画抛高,数值越小越高*/#definePANHOU10/*#definePANAMOUNT19盘子数*/intPANAMOUNT;typedefintpans;typedefstructs_pillar{intamount;intx,y;panspan[20];/*存放每个盘的代号*/.专业.整理.下载可编辑}pillars;pillarspillar[4];/*三个
5、台柱*/intmovecount=0;/*移动计数*/voiddrawpillar(pillarsp);voidinit();/*初始化函数*/voiddrawmat(char*mat,intmatsize,intx,inty,intcolor);/*点陈汉字*/voiddrawpan(pansp,intx,inty);voidzimu();/*显示字幕*/voiddrawpps();/*画装盘的台柱*/voidhanoi();/*主算法*/voidhanoi(intn,charone,chartwo,charthree);voidsdelay(intdelay_t);/*函数申明*/vo
6、idfinish();/*完成!*/voidmain(void)/*主函数*/{printf("tpleaseinputn(n<=19):");/*输入要演示的盘子数*/scanf("%d",&PANAMOUNT);if(PANAMOUNT<1
7、
8、PANAMOUNT>19)/*越界的话n当19处理*/PANAMOUNT=19;init();drawpps();hanoi(PANAMOUNT,'a','b','c');finish();}voidinit()/*初始化函数*/{intgd=DETECT,gm;inti,n,color;clrscr();initgraph(&gd,&gm
9、,"c:\tc");cleardevice();pillar[1].amount=PANAMOUNT;pillar[1].x=105;pillar[1].y=405;for(i=1;i<=pillar[1].amount;i++){pillar[1].pan[i]=pillar[1].amount-i+1;}.专业.整理.下载可编辑pillar[2].amount=0;pillar[2].x=320;pillar[2]