欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    人工智能二野人过河问题实验.docx

    • 资源ID:2917137       资源大小:38.17KB        全文页数:15页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    人工智能二野人过河问题实验.docx

    1、人工智能二野人过河问题实验实 验 报 告课程名称 人工智能_ 实验项目 野人过河问题_ 实验仪器 电脑 、visual C+_ 系 别 计算机学院_ 专 业 _计算机科学与技术_ 班级/学号 学生 _ _实验日期 2010年 月 日_ 成 绩 _ 指导教师 一、 实验目的理解并熟悉掌握深度优先搜索和广度优先搜索地方法。二、 实验容题目:设有3个传教士和3个野人来到河边,打算乘一只船从右岸到左岸去。 该船的负载能力为两人。在任何时候,如果野人人数超过传教士人数,野人 就会把传教士吃掉。他们怎样才能用这条船安全的把所有人都渡过河去? 三、代码和结果#include #include #includ

    2、e #define maxloop 100 /* 最大层数,对于不同的扩展方法自动调整取值 */#define pristnum 3 /*初始化时设定有3个野人3个传教士,实际可以改动*/#define slavenum 3struct SPQ int sr,pr; /* 船运行一个来回后河右岸的野人、传教士的人数 */int sl,pl; /* 船运行一个来回后河左岸的野人、传教士的人数 */ int ssr,spr; /* 回来(由左向右时)船上的人数 */ int sst,spt; /* 去时(由右向左时)船上的人数 */ int loop; /* 本结点所在的层数 */ struct

    3、SPQ *upnode ,*nextnode;/* 本结点的父结点和同层的下一个结点的地址 */spq; int loopnum;/* 记录总的扩展次数 */int openednum;/* 记录已扩展节点个数 */int unopenednum;/* 记录待扩展节点个数 */int resultnum;struct SPQ *opened;struct SPQ *oend;struct SPQ *unopened; struct SPQ *uend;struct SPQ *result;void initiate();void releasemem();void showresult();v

    4、oid addtoopened(struct SPQ *ntx);int search();void goon();int stretch(struct SPQ* ntx);void recorder();int main() int flag; /* 标记扩展是否成功 */ for( ; ; ) initiate(); flag = search (); if(flag = 1) recorder(); releasemem(); showresult(); goon(); else printf(无法找到符合条件的解); releasemem(); goon(); system(pause

    5、); return 0;void initiate() int x; char choice; uend = unopened = (struct SPQ*)malloc(sizeof(spq); if(uend=NULL) printf(n存不够!n); exit(0); unopenednum=1; openednum=0; unopened - upnode = unopened; /* 保存父结点的地址以成链表 */ unopened - nextnode = unopened; unopened - sr = slavenum; unopened - pr = pristnum; u

    6、nopened - sl = 0; unopened - pl = 0; unopened - sst = 0; unopened - spt = 0; unopened - ssr = 0; unopened - spr = 0; unopened - loop = 0; printf(题目:设有n个传教士和m个野人来到河边,打算乘一只船从右岸到左岸去。n); printf(该船的负载能力为两人。在任何时候,如果野人人数超过传教士人数,野人n); printf(就会把传教士吃掉。他们怎样才能用这条船安全的把所有人都渡过河去?n); printf(n默认的n、m值皆为3n); for(;) p

    7、rintf(n是否修改?(Y/N); scanf(%s,&choice); choice=toupper(choice); if(choice=Y) printf(n请输入传教士人数); for(;) scanf(%d,&x); if(x0) unopened - pr = x; break; else printf(n输入值应大于0!n请重新输入); printf(n请输入野人人数); for(;) scanf(%d,&x); if(x0) unopened - sr = x; break; else printf(n输入值应大于0!n请重新输入); break; if(choice=N)b

    8、reak; int search() int flag; struct SPQ *ntx; /* 提供将要扩展的结点的指针 */ for( ; ; ) ntx = unopened; /* 从待扩展链表中提取最前面的一个 */ if(ntx-loop = maxloop) return 0; addtoopened(ntx); /* 将ntx加入已扩展链表,并将这个节点从待扩展链表中去掉 */ flag = stretch(ntx); /* 对ntx进行扩展,返回-1,0,1 */ if(flag = 1) return 1; int stretch(struct SPQ *ntx) int

    9、fsr , fpr ; /* 在右岸上的人数 */ int fsl , fpl ; /* 在左岸上的人数 */ int sst , spt ; /* 出发时在船上的人数 */ int ssr , spr ; /* 返回时船上的人数 */ struct SPQ *newnode; for (sst = 0 ; sst sr; fpr = ntx - pr; fsl = ntx - sl; fpl = ntx - pl; if (sst = fsr) & ( 2 - sst) upnode = ntx; /* 保存父结点的地址以成链表 */ newnode - nextnode = NULL; n

    10、ewnode - sr = 0; newnode - pr = 0; newnode - sl = opened - sr; newnode - pl = opened - pr; newnode - sst = sst; newnode - spt = spt; newnode - ssr = 0; newnode - spr = 0; newnode - loop = ntx - loop + 1; oend - nextnode = newnode; oend = newnode; openednum+; return 1; else if (fpr - fsr) * fpr = 0)

    11、/* 判断是否满足传教士人数必须大于或等于野人人数 */ fsl = fsl + sst; fpl = fpl + spt; for (ssr = 0 ; ssr = 1 ; ssr+) /* 返回 */ int ffsl , ffpl; if (ssr = fsl) & (1 - ssr) = 0) /* 若符合条件则分配存并付值 */ int ffsr , ffpr; ffsr = fsr + ssr; ffpr = fpr + spr; newnode = (struct SPQ*) malloc (sizeof(spq); if(newnode=NULL) printf(n存不够!n)

    12、; exit(0); newnode - upnode = ntx; /* 保存父结点的地址以成链表 */ newnode - sr = ffsr; newnode - pr = ffpr; newnode - sl = ffsl; newnode - pl = ffpl; newnode - sst = sst; newnode - spt = spt; newnode - ssr = ssr; newnode - spr = spr; newnode - loop = ntx - loop + 1; uend - nextnode = newnode; uend = newnode; un

    13、openednum+; return 0;void addtoopened(struct SPQ *ntx) unopened = unopened - nextnode; unopenednum-; if (openednum = 0 ) oend = opened = ntx; oend - nextnode = ntx; oend = ntx; openednum+;void recorder() int i , loop; struct SPQ *newnode; struct SPQ *ntx; loop = oend - loop; ntx = oend; resultnum =

    14、0; for( i = 0 ; i sr = ntx - sr; newnode - pr = ntx - pr; newnode - sl = ntx - sl; newnode - pl = ntx - pl; newnode - sst = ntx - sst; newnode - spt = ntx - spt; newnode - ssr = ntx - ssr; newnode - spr = ntx - spr; newnode - nextnode = NULL; ntx = ntx - upnode; if(i = 0) result = newnode; newnode -

    15、 nextnode = result; result = newnode; resultnum+; void releasemem() int i; struct SPQ* nodefree; for ( i = 1 ; i nextnode; free(nodefree); for ( i = 0 ; i nextnode; free(nodefree); void showresult() int i; int fsr , fpr ; /* 在右岸上的人数 */ int fsl , fpl ; /* 在左岸上的人数 */ struct SPQ* nodefree; printf(%d个传教

    16、士,result - pr); printf(%d个野人,result - sr); printf(%d个传教士,result - pl); printf(%d个野人,result - sl); for ( i = 1 ; i nextnode; free(nodefree); printf(nnt左岸人数 船上人数及方向 右岸人数n); printf(第%d轮n,i); fpl = result - pl - result - spt + result - spr; fpr = result - pr - result - spr; fsl = result - sl - result -

    17、sst + result - ssr; fsr = result - sr - result - ssr; printf(传教士%8d%8dt spt,fpr); printf(野 人%8d%8dt sst,fsr); printf(传教士%8d%8dt-t%8dn,result - pl,result - spr,result - pr - result - spr); printf(野 人%8d%8dt-t%8dn,result - sl,result - ssr,result - sr - result - ssr); printf(n全体传教士和野人全部到达对岸); free(result);void goon() char choice; for(;) printf(是否继续?(Y/N)n); scanf (%s , &choice); choice=toupper(choice); if(choice=Y)break; if(choice=N)exit(0); 四实验心得


    注意事项

    本文(人工智能二野人过河问题实验.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开