人工智能梵塔问题.docx

上传人:b****1 文档编号:1676655 上传时间:2022-10-23 格式:DOCX 页数:11 大小:91.55KB
下载 相关 举报
人工智能梵塔问题.docx_第1页
第1页 / 共11页
人工智能梵塔问题.docx_第2页
第2页 / 共11页
人工智能梵塔问题.docx_第3页
第3页 / 共11页
人工智能梵塔问题.docx_第4页
第4页 / 共11页
人工智能梵塔问题.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

人工智能梵塔问题.docx

《人工智能梵塔问题.docx》由会员分享,可在线阅读,更多相关《人工智能梵塔问题.docx(11页珍藏版)》请在冰豆网上搜索。

人工智能梵塔问题.docx

人工智能梵塔问题

梵塔问题实验报告

实验目的

1.熟悉和掌握问题规约法的原理、实质和规约过程

2.理解规约图的表示方法

3.熟悉并掌握递归解决问题的思想

实验原理

1.利用问题规约法的原理进行问题的分析与描述

2.利用递归思想进行问题的解决

实验条件

1.WindowNT/xp/7及以上的操作系统

2.内存在512M以上

3.CPU在奔腾II以上

实验内容

梵塔问题源于印度古老的一个传说。

相传开天辟地的神勃拉玛创造世界时在

印度北部的佛教圣地的圣庙里,安放了三根金刚石的棒,第一根上面套着64个

圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮

助,但每次只能搬一个,而且大的不能放在小的上面。

值班僧侣按照法则日夜不停地搬运,当搬运完成时世界将在一声霹雳中毁灭。

实验分析

1.命令僧人62将62个盘子从A移动到C

2.自己将一个盘子从A座移动到B座

3.再命令僧人62将62个盘子移到B座

再进行一次递归。

如此“层层下放”,直到后来找到第2个僧人,让他完成将2个盘子从一个座移到另一个座,进行到此,问题就解决了。

最后找到第1个僧人,让他完成将一个盘子从一个座移动到另一个座,至此,全部工作已经完成,该烦他问题得到解决。

实验步骤

⑴主程序流程图

初始化过程

盘子数为n

结束

退出一级调用n=n+1

丁程

结束

梵塔问题递归过程流程图

程序代码

#include

#inelude

#inelude

#inelude

#inelude

#definePAOGAO190/*动画抛高,数值越小越高*/

#definePANHOU10

/*#definePANAMOUNT19盘子数*/

intPANAMOUNT;

typedefintpans;

typedefstructs_pillar

{

intamount;

intx,y;

panspan[20];/*存放每个盘的代号*/

}pillars;

pillarspillar[4];/*三个台柱*/

intmovecount=O;/*移动计数*/

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);/*函数申明*/

voidfinish();/*完成!

*/

voidmain(void)/*主函数*/

{

printf("\n\tpleaseinputn(*=19):

");/*输入要演示的盘子数*/

scanf("%d",&PANAMOUNT);

if(PANAMOUNT<1||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,"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].y=405;

pillar[3].amount=0;

pillar[3].x=527;

pillar[3].y=405;

setcolor(YELLOW);/*柱座标记*/

settextstyle(0,0,2);

outtextxy(105,418,"A");

outtextxy(320,418,"B");

outtextxy(527,418,"C");

setcolor(YELLOW);/*画框*/

setlinestyle(SOLID_LINE,O,NORM_WIDTH);

line(0,0,0,479);

line(0,0,639,0);

line(639,0,639,479);

line(0,479,639,479);

/*线上字*/

line(0,PAOGAO-PANHOU-40,450,PAOGAO-PANHOU-40);/*黄金线*/settextstyle(0,0,1);

outtextxy(250,PAOGAO-PANHOU-50,"PressANYKeytoEXIT!

");zimu();

}

voiddrawpillar(pillarsp)/*画柱*/

{

intx,y,mount;

x=p.x;

y=p.y;

mount=p.amount;

setfillstyle(SOLID_FILL,BROWN);

bar(x,(y-mount*PANHOU-2O),x+5,y);

bar(x-45,y,x+55,y+5);

}

voiddrawmat(char*mat,intmatsize,intx,inty,intcolor)

/*依次:

字模指针、点阵大小、起始坐标(x,y)、颜色*/

{inti,j,k,n;

n=(matsize-1)/8+1;

for(j=0;j

for(i=0;i

for(k=0;k<8;k++)

if(mat『n+i]&(0x80»k))/*测试为1的位则显示*/

putpixel(x+i*8+k,y+j,color);

}

voiddrawpan(pansp,intx,inty)

{

setfillstyle(SOLID_FILL,LIGHTGRAY);

bar(x-(5+5*p),y-PANHOU+1,x+(5+5*p),y);

setlinestyle(SOLID_LINE,O,NORM_WIDTH);

setcolor(BLACK);

line(x-(5+5*p),y,x+(5+5*p),y);

line(x-(5+5*p),y+1,x+(5+5*p),y+1);

}

voidclearpan(pansp,intx,inty)

{

setfillstyle(SOLID_FILL,BLACK);

bar(x-(5+5*p),y-PANHOU,x+(5+5*p),y);

}

voiddrawpps()/*画装盘的台柱*/

{

pillarsp;

inti,j;

intx,y,mount;

for(i=1;i<=3;i++)

{

p=pillar[i];

x=p.x;

y=p.y;

mount=p.amount;

drawpillar(p);/*画台柱*/

for(j=1;j<=mount;j++)

{

drawpan(p.pan[j],x,y-PANHOU*(j-1));

}

}

}

voidhanoi(intn,charone,chartwo,charthree)

{

voidmove(charx,chary);/*声明*/

if(n==1)

{

move(one,three);

}

else

{

hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);

}

}

voidmove(charx,chary)

{

voidclearprocess();/*申明函数*/

voidaction();/*申明移动动画函数*/

intifrom,ito;

pansdata;

intmountf,mountt;

chara[1];

charb[1];

a[0]=x;a[1]='\O:

b[O]=y;b[1]='\O:

ifrom=x-96;

ito=y-96;

mountf=pillar[ifrom].amount;/*数量*/

mountt=pillar[ito].amount;

data=pillar[ifrom].pan[mountf];

pillar[ifrom].amount--;/*出栈*/

sdelay(6);/*暂停屏幕*/

if(movecount>=15)clearprocess();/*清除步骤提示*/movecount=movecount%15+1;/*模20+1*/setcolor(RED);/*输出移动过程*/settextstyle(TRIPLEX_FONT,HORIZ_DIR,1);outtextxy(560,30+movecount*10,a);

outtextxy(580,30+movecount*10,"--->");outtextxy(620,30+movecount*10,b);

setfillstyle(SOLID_FILL,BLACK);/*涂黑_重画*/bar(3,pillar[1].y-PANHOU*19-20,584,412);

drawpps();/*重画*/

action(data,pillar[ifrom],pillar[ito]);/*此处添加动画函数*/

pillar[ito].amount++;/*入栈*/

mountt=pillar[ito].amount;/*刷新数量*/

pillar[ito].pan[mountt]=data;

drawpps();/*重画*/

}

voidclearprocess()

{

inti;

setfillstyle(SOLID_FILL,BLACK);

for(i=0;i<=16;i++)

{

bar(545,30+i*10,638,40+i*10);

sdelay

(1);/*动画延迟n个(1/18.2)秒*/

}

}

整数1代表(1/18.2)秒*/

voidsdelay(intdelay_t)

{

clock_tstart_time;

start_time=clock();

while((

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 公共行政管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1