人工智能实验2 传教士过河问题.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
人工智能实验报告 班级:计研-12班 学号:2012312120105 姓名:孔德星 实验二 知识表示方法 1.实验目的 了解 (2)掌握的分析方法。实验2个实验内容可以选择1个实现) (1)梵塔问题实验。熟悉和掌握问题规约法的原理、实质和规约过程;理解规约图的表示方法; (2)状态空间法实验。从前有一条河,河的左岸有m个传教士、m个野人和一艘最多可乘n人的小船。约定左岸,右岸和船上或者没有传教士,或者野人数量少于传教士,否则野人会把传教士吃掉。搜索一条可使所有的野人和传教士安全渡到右岸的方案。 3.实验报告要求简述实验原理及m/2。此种情况下,先把所有的野人度过去,每次返回一个野人,当出现(m,0,0)情况时,返回m-n个野人(若m==n,返回1个野人)。然后渡n个传教士,此时野人==传教士,然后返回一个野人和传教士,再开始最大限度的渡传教士,每次返回一个野人,最终直到a==b==c==0; B、n=3n=m/2 || n==1,显然此时无解; C、n=4n=m/2,此时只能每次传n/2个传教士和野人,每次返回一个野人和传教士,直到最终结果。 程序流程图: (2)源程序清单: 本程序用C++语言编写。 #include iostream using namespace std; bool flag = false; //标记是否有解 bool af = false; //标记a是否为0 bool bf = false; //当b变为0后赋值为true; bool ef = false; //当a==b后赋值为true bool f = false; //判断n是否大于m/2 int m;//传教士野人的个数 int n;//船一次能装载的人数 void mc(int a,int b,int c); int main() { cout传教士与野人过河问题。\n假设最初时传教士与野人在河的右岸。\n; cout请输入传教士野人的个数:\n; cinm; cout请输入船一次能装载的人数: \n; cinn; cout右岸传教士人数\t右岸野人个数\t船的位置(1.右岸 0左岸)endl; if((m=3 n=m/2) || n==1) //此种情况无解 {coutNo solution!\n; system(pause); return 0; } if(n m/2) f = true; mc(m,m,1); if(flag == true){ coutSuccess!\n; } else{ coutNo solution!\n; } system(pause); return 0; } void mc(int a,int b,int c) { if(flag==true) return; if(c == 1) { cout\ta\t\tb\t\tc\t\n; if(f==true) //如果nm/2 { if(bf!=true) //b未达到过0 { if(a+b=n) //如果a+b=n,完全渡过 mc(0,0,1-c); //递归 else { for(int j = n;j = 0;j--) { if(b = j) { mc(a,b-j,1-c); //递归 if(flag==true) return; } } } } else if(ef!=true af==false) { for(int i = n;i=0;i--) { if(a=i) { mc(a-i,b,1-c); //递归 if(flag==true) return; } } } if(ef == true af==false) { if(a=n) mc(a-n,b,1-c); //递归 else if(a+bn) mc(0,0,1-c); else mc(0,b-(n-a),1-c); } if(af==true) { if(b=n) mc(a,b-n,1-c); //递归 else mc(a,0,1-c);

文档评论(0)

ffpg + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档