人工智能 野人过河问题 免费Word下载.docx

上传人:b****6 文档编号:21394076 上传时间:2023-01-30 格式:DOCX 页数:13 大小:38.65KB
下载 相关 举报
人工智能 野人过河问题 免费Word下载.docx_第1页
第1页 / 共13页
人工智能 野人过河问题 免费Word下载.docx_第2页
第2页 / 共13页
人工智能 野人过河问题 免费Word下载.docx_第3页
第3页 / 共13页
人工智能 野人过河问题 免费Word下载.docx_第4页
第4页 / 共13页
人工智能 野人过河问题 免费Word下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

人工智能 野人过河问题 免费Word下载.docx

《人工智能 野人过河问题 免费Word下载.docx》由会员分享,可在线阅读,更多相关《人工智能 野人过河问题 免费Word下载.docx(13页珍藏版)》请在冰豆网上搜索。

人工智能 野人过河问题 免费Word下载.docx

/*船运行一个来回后河左岸的野人、传教士的人数*/

intssr,spr;

/*回来(由左向右时)船上的人数*/

intsst,spt;

/*去时(由右向左时)船上的人数*/

intloop;

/*本结点所在的层数*/

structSPQ*upnode,*nextnode;

/*本结点的父结点和同层的下一个结点的地址*/

}spq;

intloopnum;

/*记录总的扩展次数*/

intopenednum;

/*记录已扩展节点个数*/

intunopenednum;

/*记录待扩展节点个数*/

intresultnum;

structSPQ*opened;

structSPQ*oend;

structSPQ*unopened;

structSPQ*uend;

structSPQ*result;

voidinitiate();

voidreleasemem();

voidshowresult();

voidaddtoopened(structSPQ*ntx);

intsearch();

voidgoon();

intstretch(structSPQ*ntx);

voidrecorder();

intmain()

{

intflag;

/*标记扩展是否成功*/

for(;

;

{

initiate();

flag=search();

if(flag==1)

recorder();

releasemem();

showresult();

goon();

}

else

printf("

无法找到符合条件的解"

);

system("

pause"

return0;

}

voidinitiate()

intx;

charchoice;

uend=unopened=(structSPQ*)malloc(sizeof(spq));

if(uend==NULL)

\n内存不够!

\n"

exit(0);

unopenednum=1;

openednum=0;

unopened->

upnode=unopened;

/*保存父结点的地址以成链表*/

nextnode=unopened;

sr=slavenum;

pr=pristnum;

sl=0;

pl=0;

sst=0;

spt=0;

ssr=0;

spr=0;

loop=0;

设有n个传教士和m个野人来到河边,打算乘一只船从右岸到左岸去。

该船的负载能力为两人。

在任何时候,如果野人人数超过传教士人数,野人\n"

就会把传教士吃掉。

\n默认的n、m值皆为3\n"

for(;

;

\n是否修改?

(Y/N)"

scanf("

%s"

&

choice);

choice=toupper(choice);

if(choice=='

Y'

{

\n请输入传教士人数"

%d"

x);

if(x>

0)

pr=x;

break;

elseprintf("

\n输入值应大于0!

\n请重新输入"

\n请输入野人人数"

0)

sr=x;

}

N'

)break;

intsearch()

structSPQ*ntx;

/*提供将要扩展的结点的指针*/

ntx=unopened;

/*从待扩展链表中提取最前面的一个*/

if(ntx->

loop==maxloop)

addtoopened(ntx);

/*将ntx加入已扩展链表,并将这个节点从待扩展链表中去掉*/

flag=stretch(ntx);

/*对ntx进行扩展,返回-1,0,1*/

return1;

intstretch(structSPQ*ntx)

intfsr,fpr;

/*在右岸上的人数*/

intfsl,fpl;

/*在左岸上的人数*/

intsst,spt;

/*出发时在船上的人数*/

intssr,spr;

/*返回时船上的人数*/

structSPQ*newnode;

for(sst=0;

sst<

=2;

sst++)/*讨论不同的可能性并判断是否符合条件*/

fsr=ntx->

sr;

fpr=ntx->

pr;

fsl=ntx->

sl;

fpl=ntx->

pl;

if((sst<

=fsr)&

&

((2-sst)<

=fpr))/*满足人数限制*/

spt=2-sst;

fsr=fsr-sst;

fpr=fpr-spt;

if((fpr==0)&

(fsr==0))/*搜索成功*/

newnode=(structSPQ*)malloc(sizeof(spq));

if(newnode==NULL)

newnode->

upnode=ntx;

nextnode=NULL;

sr=0;

pr=0;

sl=opened->

pl=opened->

sst=sst;

spt=spt;

loop=ntx->

loop+1;

oend->

nextnode=newnode;

oend=newnode;

openednum++;

elseif((fpr-fsr)*fpr>

=0)/*判断是否满足传教士人数必须大于或等于野人人数*/

fsl=fsl+sst;

fpl=fpl+spt;

for(ssr=0;

ssr<

=1;

ssr++)/*返回*/

intffsl,ffpl;

if((ssr<

=fsl)&

((1-ssr)<

=fpl))

spr=1-ssr;

ffsl=fsl-ssr;

ffpl=fpl-spr;

if((ffpl-ffsl)*ffpl>

=0)

{/*若符合条件则分配内存并付值*/

intffsr,ffpr;

ffsr=fsr+ssr;

ffpr=fpr+spr;

sr=ffsr;

pr=ffpr;

sl=ffsl;

pl=ffpl;

ssr=ssr;

spr=spr;

uend->

uend=newnode;

unopenednum++;

voidaddtoopened(structSPQ*ntx)

unopened=unopened->

nextnode;

unopenednum--;

if(openednum==0)

oend=opened=ntx;

nextnode=ntx;

oend=ntx;

voidrecorder()

inti,loop;

loop=oend->

loop;

ntx=oend;

resultnum=0;

for(i=0;

i<

=loop;

i++)

sr=ntx->

pr=ntx->

sl=ntx->

pl=ntx->

sst=ntx->

sst;

spt=ntx->

spt;

ssr=ntx->

ssr;

spr=ntx->

spr;

ntx=ntx->

upnode;

if(i==0)

result=newnode;

nextnode=result;

resultnum++;

voidreleasemem()

inti;

structSPQ*nodefree;

for(i=1;

openednum;

nodefree=opened;

opened=opened->

free(nodefree);

for(i=0;

unopenednum;

nodefree=unopened;

voidshowresult()

%d个传教士"

result->

pr);

%d个野人"

sr);

pl);

sl);

resultnum;

nodefree=result;

result=result->

\n\n\t左岸人数船上人数及方向右岸人数\n"

第%d轮\n"

i);

fpl=result->

pl-result->

spt+result->

fpr=result->

pr-result->

fsl=result->

sl-result->

sst+result->

fsr=result->

sr-result->

传教士%8d%8d\t<

-\t%8d\n"

fpl,result->

spt,fpr);

野人%8d%8d\t<

fsl,result->

sst,fsr);

传教士%8d%8d\t->

\t%8d\n"

pl,result->

spr,result->

spr);

野人%8d%8d\t->

sl,result->

ssr,result->

ssr);

\n全体传教士和野人全部到达对岸"

free(result);

voidgoon()

是否继续?

(Y/N)\n"

scanf("

&

)exit(0);

}

四.实验心得

这次试验让我熟悉了环境,加深了对算法的理解,掌握了把基本算法编程机器语言的能力。

更加深入了解了什么是人工智能,让我了解了人工智能的作用以及含义和人工智能的使用范围以及对于我们未来生活得作用的广大。

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

当前位置:首页 > 小学教育 > 语文

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

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