下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.上机内容传教士与野人问题求解(宽度搜索算法)二 问题背景:从前有一条河,河的左岸有m个传教士(Missionary)和m个野人(Cannibal),和一艘最多可乘n人的小船。约定左岸,右岸和船上或者没有传教士,或者野人数量少于传教士,否则野人会把传教士吃掉。三 实验内容:编程,接收m和n,搜索一条可让所有的野人和传教士安全渡到右岸的方案,例如下图:(M表示传教士(Missionary),C 表示野人(Cannibal))初态目标LeftBankRiverRightbankLeftBankRiverRightbankM.M.C.C.注:本实验的举例均以3个传教士和3个野人同在左岸作为初始状态
2、。四 实验方案和算法: 1数据结构: 本实验需要用到的数据结构主要是队列和堆栈,其实现均包含于dso.h头文件中,分别命名为class stack和class queue。2宽度搜索算法:(1)结点结构:class Move public: int missionary; /要移动的传教士数量 int cannibal; /野人;class ElemType : Move /继承Move类,获得传教士,野人数据成员。private: bool boat; /船是否在左岸?public: ElemType* flag; / 标示前一状态即扩展出本结点的父结点信息 ElemType(int MAX
3、_PEOPLE) /创建初始状态 missionary = cannibal = MAX_PEOPLE; boat = true; flag = NULL;在这里,Elemtype集成了Move,从而获得Move类的传教士和野人数据成员。以上两个类的数据成员用于保存所有扩展生成的结点。其中missionary表示表示左岸上传教士的树目,cannibal表示左岸上野人的树目,boat表示船在哪个岸上(其中true表示在左岸,这是船的初始状态,表示false在右岸), flag用于标示前一状态即扩展出本结点的父结点信息,以便最后回搜找出解的路径。举例说明:假设左岸有3个传教士和3个野人,小船最多可
4、乘2人。把当前左岸的状态抽象为:(3,3,1),前两个3代表左岸有3个传教士和3个野人,1代表船在左岸。很明显,目标状态为(0,0,0),表示左岸的传教士和也人数目都是0,而船在右岸。(2)船的行动规则(successor function):把每一次可行的渡船方案作为行动规则,用Move类的(m,c)表示。行动规则的两位数分别代表要移动的传教士,野人的数量。对于固定大小的船,其装载能力是一定的,所以它的行动规则空间也是一定的。在这里,用MoveGroup类的构造函数构造出所有的行动规则。 注意,这里MoveGroup类中的Move对象只有500的可用空间,所以,输入的传教士和野人数目构成的行
5、动规则不能超过500种。(3)宽度优先算法:实验的主要搜索算法由ANSWER类的构造函数实现,这里主要用到了OPEN和CLOSED队列,以及一个临时的TEMP堆栈。其中,OPEN表用于存放扩展结点,CLOSED表用于存放被扩展结点,TEMP则用于用于记录成功搜索的路径。搜索过程大致如下描述:先构造初始结点以及船的行动规则,初始结点入OPEN队列,以宽度优先依次搜索OPEN队列头结点的子结点,同时保存受访问结点的父结点信息,知道搜索到目标结点或者无解为止。算法框图如下所示: 开始初始接结点并入OPEN队列Y返回OPEN为空?NOPEN队列头结点n出列,并入CLOSED队列把结点的子结点并入OPE
6、N队列,保存父结点Y被扩展结点还有子结点吗?N返回3 程序界面和功能说明:程序运行环境为DOS控制台,运行开始以后,程序提示输入需要坐船的传教士和野人数目,例如输入3表示有3个传教士和3个野人。 用户按回车键以后,程序继续提示输入船的装载能力,例如输入2表示这个船依次最多可以坐2人。注:一般情况下,船的装载能力应该少于传教士或野人的数量,而且一般为偶数。程序开始运行时的界面截图:程序运行结束时的界面截图:输出文件示例:Left(3, 3) | (0, 0)RightStep 1Move 0 missionaries and 2 cannibals to the right side.Left(
7、3, 1) | (0, 2)RightStep 2Move 0 missionaries and 1 cannibals to the left side.Left(3, 2) | (0, 1)RightStep 3Move 0 missionaries and 2 cannibals to the right side.Left(3, 0) | (0, 3)RightStep 4Move 0 missionaries and 1 cannibals to the left side.Left(3, 1) | (0, 2)RightStep 5Move 2 missionaries and 0
8、 cannibals to the right side.Left(1, 1) | (2, 2)RightStep 6Move 1 missionaries and 1 cannibals to the left side.Left(2, 2) | (1, 1)RightStep 7Move 2 missionaries and 0 cannibals to the right side.Left(0, 2) | (3, 1)RightStep 8Move 0 missionaries and 1 cannibals to the left side.Left(0, 3) | (3, 0)Ri
9、ghtStep 9Move 0 missionaries and 2 cannibals to the right side.Left(0, 1) | (3, 2)RightStep 10Move 0 missionaries and 1 cannibals to the left side.Left(0, 2) | (3, 1)RightStep 11Move 0 missionaries and 2 cannibals to the right side.Left(0, 0) | (3, 3)RightOK!5错误说明:(1) 关于有没有解的问题:由于传教士和野人问题是一个真实的问题,来到
10、岸边的传教士和野人数目与船的装载能力都是随机的,所以某些特定情况下,要以一定规则把人都运到船的对岸是没有解的,例如假设有10个传教士和10个野人,船一次最多能够装2人,这时候是不能把人都运到对岸的,这时候程序会提示:There may not be any way to transport these guys.(2) 关于运行时间的问题:本实验使用宽度优先搜索算法,但并没有进行优化,所以有时候程序虽然确实有解,但是由于算法的效率确实很低,造成的时间上的开销有时候可能会比起喝一杯咖啡的时间还要长,这时候程序会提示:Please wait patiently。Working . . .六 心得体会:这个是我们小组的第一个实验,由于经验以及能力有限,所
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度大连市安居客平台二手房产交易合同3篇
- 2025年度健康管理系统代售合同协议范本4篇
- 2025年度建筑沙子购销及绿色建材认证合同范本3篇
- 2025年度建筑模板脚手架绿色环保施工合同范本4篇
- 2025年度网络安全技术创新与协议搭建合同4篇
- 2025年度打桩工程施工进度与质量控制合同范本模板4篇
- 2025年度出差期间知识产权保护合同4篇
- 2025年度茶艺培训与茶艺师职业资格认证合作合同4篇
- 2025年度大学教授学术指导与研究生培养聘用合同4篇
- 二零二五年度美团外卖加盟店运营管理合同4篇
- 物业民法典知识培训课件
- 2023年初中毕业生信息技术中考知识点详解
- 2024-2025学年山东省德州市高中五校高二上学期期中考试地理试题(解析版)
- 《万方数据资源介绍》课件
- 麻风病病情分析
- 《急诊科建设与设备配置标准》
- 第一章-地震工程学概论
- JJF(陕) 063-2021 漆膜冲击器校准规范
- 《中国糖尿病防治指南(2024版)》更新要点解读
- TSGD7002-2023-压力管道元件型式试验规则
- 2024年度家庭医生签约服务培训课件
评论
0/150
提交评论