ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:146.48KB ,
资源ID:28959330      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28959330.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验二.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验二.docx

1、实验二人工智能实验报告 学院: 信息工程学院 班级: 计研-14 学号: 笑嘻嘻笑嘻嘻 姓名: 笑嘻嘻笑嘻嘻 2014年11月实验二 梵塔问题实验1实验目的(1)了解知识表示相关技术;(2)掌握问题规约法或者状态空间法的分析方法。2实验内容梵塔问题实验。熟悉和掌握问题规约法的原理、实质和规约过程理解规约图的表示方法。3实验报告要求(1)简述实验原理及方法,并请给出程序设计流程图。对于有n个圆盘的汉诺塔问题,从x塔座移动至z塔座的方法为为:如果只有一个圆盘,直接从x移至z,否则,演变成递归调用n-1个圆盘的汉诺塔问题,即将x塔座上面的n-1个圆盘从x移到y;然后把最下面的一个圆盘从x直接移到z;

2、最后转换成递归调用n-1个圆盘的汉诺塔问题,再把y上临时存放的n-1个圆盘移到z塔座。程序设计流程图:(2)源程序清单:#includevoid move(char a,int n, char b ) printf(圆盘编号为%d %c移至%cn,n,a,b);void hanoi (int n, char x, char y, char z) / 将塔座x上编号为1至n 的n个圆盘搬到z上if (n=1) move(x, 1, z); / 将编号为的圆盘从x移到zelsehanoi(n-1, x, z, y); / 将x上编号为至n-1个圆盘移到y, z作辅助塔move(x, n, z);

3、/ 将编号为n的圆盘从x移到zhanoi(n-1, y, x, z); / 将y上编号为至n-1的圆盘移到z, x作辅助塔 void main()int n;printf(请输入x塔上圆盘的数量:); scanf(%d,&n); hanoi(n,x,y,z); (3)实验结果及分析。心得体会:通过梵塔问题的实验,我掌握了问题规约法的原理和实质,熟练运用了递归算法,充分认识了规约过程。可以分析出本实验的时间复杂度为C(n)=-1,这次实验报告的完成也增强了我对人工智能的学习积极性,和对语言的理解和应用能力。实验二 状态空间法实验1实验目的(1)了解知识表示相关技术;(2)掌握问题规约法或者状态空

4、间法的分析方法。2实验内容状态空间法实验。从前有一条河,河的左岸有m个传教士、m个野人和一艘最多可乘n人的小船。约定左岸,右岸和船上或者没有传教士,或者野人数量少于传教士,否则野人会把传教士吃掉。搜索一条可使所有的野人和传教士安全渡到右岸的方案。3实验报告要求(1)简述实验原理及方法,并请给出程序设计流程图。实验原理:初始状态是m个传教士、m个野人在河的左岸,现在用一个三元组(a,b,c)表示状态,其中a表示起始岸上传教士数目,b表示起始岸上野人数目,c表示小船位置,设定1代表在左岸,0代表在右岸。可分为三种情况讨论:当nm/2时,先把所有的野人度过去,每次返回一个野人,当出现(m,0,0)情

5、况时,返回m-n个野人(若m=n,返回1个野人)。然后渡n个传教士,此时野人=传教士,然后返回一个野人和传教士。由于河的左岸传教士与野人数目是(m-n+1)m/2,所有可以完全渡传教士,然后每次返回一个野人,最终直到a=b=c=0;当n=3&n=4&n=m/2,此时只能每次传n/2个传教士和野人,每次返回一个野人和传教士,直到最终结果。流程图: Y N (2)源程序清单:#include iostreamusing namespace std;bool flag = false; /标记是否有解bool af = false; /标记a是否为0bool bf = false; /当b变为0后赋

6、值为true;bool ef = false; /当a=b后赋值为truebool f = false; /判断n是否大于m/2int m;/传教士野人的个数int n;/船一次能装载的人数void crossing(int a,int b,int c);int main() coutm; coutn; if(n=3 & n=m/2) | n=1) cout此种情况无解!n; system(pause); return 0; /在main函数中,return 0返回程序运行值到dos cout左岸传教士人数t 右岸野人个数t 船的位置 m/2) f = true; crossing(m,m,1

7、); if(flag = true) cout成功渡河!n; else cout无法渡河!n; system(pause); return 0;void crossing(int a,int b,int c) if(flag=true) return; else if(c = 1)/船在左岸 couttattbttcm/2 if(bf!=true) /b未达到过0 b!=0 if(a+b=n)/如果a+b= n)/野人数大于或等于船的载量 crossing(a,b-n,1-c); /递归 if(flag=true) return; else if(ef!=true& af=false) /b!

8、=0 & a!=0 if(a=n) crossing(a-n,b,1-c); /递归 if(flag=true) return; if(ef = true & af=false)/a=b & a!=0 if(a=n) crossing(a-n,b,1-c); /递归 /如果an时: else if(a+b=n) crossing(0,b-n,1-c); /递归 else crossing(0,0,1-c); else /n=m/2 crossing(a-n/2,b-n/2,1-c); /递归 /船在左岸时,右岸的情况: if(c = 0) couttattbttcm/2 if(b=0) bf

9、= true; if(m = n) crossing(a,b+1,1-c); /递归 else crossing(a,b+m-n,1-c); if(a=b) ef = true; crossing(a+1,b+1,1-c); /递归 if(a=0) af = true; crossing(a,b+1,1-c); /递归 while(bf!=true) crossing(a,b+1,1-c); /递归 else /n=m/2 crossing(a+1,b+1,1-c); /递归 (3)实验结果及分析分析与心得:通过本实验的练习,我更进一步了解状态空间法的应用原理,也对传教士野人问题有了深入的认识,同时对C+语言加以回顾与温习,学到更多的应用知识和方法,并通过这一实验的练习,及时弥补了忘却的一些知识点。本程序的实验结果使用的是传教士与野人个数为3,船的负载能力为2,也可以输入其他数据,得到其相应结果,当输入的传教士与野人和船的负载能力不符合相关比例时,则显示无解,不能成功渡河。这样的判断,可以减少程序运行的复杂度,采用递归的方法依次从河的左岸到右岸,分析河的左岸传教士与野人数目,这种算法比较简便,减少编程的工作量。我从中提高了自己分析问题的能力,对算法的精简能力也得到了增强。

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

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