




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验 传教士野人过河问题 王世婷一、实验问题传教士和食人者问题(The Missionaries and Cannibals Problem)。在河的左岸有3个传教士、1条船和3个食人者,传教士们想用这条船将所有的成员运过河去,但是受到以下条件的限制:(1)传教士和食人者都会划船,但船一次最多只能装运两个;(2)在任何岸边食人者数目都不得超过传教士,否则传教士就会遭遇危险:被食人者攻击甚至被吃掉。此外,假定食人者会服从任何一种过河安排,试规划出一个确保全部成员安全过河的计划。二、解答步骤(1) 设置状态变量并确定值域M为传教士人数,C 为野人人数,B为船数,要求M=C且M+C n break end if node(j,4)=1 %判断结点是否可扩展 if node(j,3)=1 %船在左岸 if ( (node(j,1)=0) | (node(j,1)=3) )&(node(j,2)=1) forward(j,0,1); end if (node(j,1)=1 & node(j,2)=1 | node(j,1)=3 & node(j,2)=2) forward(j,1,0); end if (node(j,1)=1 & node(j,1)=node(j,2) forward(j,1,1); end if (node(j,1)=0 | node(j,1)=3)& node(j,2)=2 forward(j,0,2); end if (node(j,1)=2 & node(j,2)=2 | node(j,1)=3 & node(j,2)=1) forward(j,2,0); end elseif node(j,3)=0%船在右岸 if ( (node(j,1)=0) | (node(j,1)=3) )&(node(j,2)=2) afterward(j,0,1); end if (node(j,1)=2 & node(j,2)=2 | node(j,1)=0 & node(j,2)=1) afterward(j,1,0); end if (node(j,1)=2 & node(j,1)=node(j,2) afterward(j,1,1); end if (node(j,1)=0 | node(j,1)=3)& node(j,2)1 BoatPriNum=node(result(j),1)-node(result(j-1),1); BoatWildNum=node(result(j),2)-node(result(j-1),2); if node(result(j),3)=1 fprintf(第%d次:左岸到右岸,传教士过去%d人,野人过去%d人n,. StepNum,abs(BoatPriNum),abs(BoatWildNum); StepNum=StepNum+1; end if node(result(j),3)=0 fprintf(第%d次:右岸到左岸,传教士过去%d人,野人过去%d人n,. StepNum,abs(BoatPriNum),abs(BoatWildNum); StepNum=StepNum+1; end j=j-1; end pause(0.2); fprintf(n); solveNum=solveNum+1; endendfprintf(问题结束);%从左岸到右岸,船上传教士x个,野人y个 function =forward(z,x,y)global n;global node;node(n,1)=node(z,1)-x;node(n,2)=node(z,2)-y;node(n,3)=0;r=search(z);if(r) returnendnode(z,4)=0;node(n,4)=1;node(n,5)=z;s=destination();if s node(n,4)=-1;endn=n+1;%从右岸到左岸,船上传教士x个,野人y个 function =afterward(z,x,y)global n;global node;node(n,1)=node(z,1)+x;node(n,2)=node(z,2)+y;node(n,3)=1;r=search(z);if(r) returnendnode(z,4)=0;node(n,4)=1;node(n,5)=z;s=destination();if s node(n,4)=-1;endn=n+1;%function r=search(x)global n node;i=x;while node(i,5)=-1 if node(i,1)=node(n,1) & node(i,2)=node(n,2) & node(i,3)=node(n,3) r=0; return end i=node(i,5);end%跟初始节点比较if node(i,1)=node(n,1) & node(i,2)=node(n,2) & node(i,3)=node(n,3) r=0; returnendr=1;%均不相同%function s=destination()global n node;if node(n,1)=0 & node(n,2)=0 & node(n,3)=0 s=1; returnends=0;2. 运用启发式函数%野人和传教士过河问题%date:2010/12/15%author:wang shi tingfunction =guohe()clear all;close all;global n node open_list index;n=2;result=zeros(100,1);node=zeros(100,5);node(1,:)=3,3,1,1,-1;%初始化%1左岸传教士数 2左岸野人数 3船(1为左岸,0为右岸)%4是否可扩展(1为可扩展) 5父节点号(-1表示无父节点,即为初始节点)index=1;open_list=1,0.01;%节点号 启发函数值while (1)row,=size(open_list);if row=0 fprintf(all the nodes in open list have been expanded.); returnendfor i1=1:row open_list(i1,2)=6.01-node(open_list(i1,1),1)-node(open_list(i1,1),2);%定义启发函数 if node(open_list(i1,1),4)=-1%如果该结点是目标结点,则打印结果 fprintf(传教士野人过河问题n); j=1; k=open_list(i1,1); StepNum=1; while (k=-1) result(j)=k; k=node(k,5); j=j+1; end j=j-1; fprintf(方法如下n); while j1 BoatPriNum=node(result(j),1)-node(result(j-1),1); BoatWildNum=node(result(j),2)-node(result(j-1),2); if node(result(j),3)=1 fprintf(第%d次:左岸到右岸,传教士过去%d人,野人过去%d人n,. StepNum,abs(BoatPriNum),abs(BoatWildNum); StepNum=StepNum+1; end if node(result(j),3)=0 fprintf(第%d次:右岸到左岸,传教士过去%d人,野人过去%d人n,. StepNum,abs(BoatPriNum),abs(BoatWildNum); StepNum=StepNum+1; end j=j-1; end pause(0.2); fprintf(问题结束n); return endendr_row,=find(open_list(:,2)=max(open_list(:,2);j=open_list(r_row(1,1),1); if node(j,3)=1 %船在左岸 if ( (node(j,1)=0) | (node(j,1)=3) )&(node(j,2)=1) forward(j,0,1); end if (node(j,1)=1 & node(j,2)=1 | node(j,1)=3 & node(j,2)=2) forward(j,1,0); end if (node(j,1)=1 & node(j,1)=node(j,2) forward(j,1,1); end if (node(j,1)=0 | node(j,1)=3)& node(j,2)=2 forward(j,0,2); end if (node(j,1)=2 & node(j,2)=2 | node(j,1)=3 & node(j,2)=1) forward(j,2,0); end elseif node(j,3)=0%船在右岸 if ( (node(j,1)=0) | (node(j,1)=3) )&(node(j,2)=2) afterward(j,0,1); end if (node(j,1)=2 & node(j,2)=2 | node(j,1)=0 & node(j,2)=1) afterward(j,1,0); end if (node(j,1)=2 & node(j,1)=node(j,2) afterward(j,1,1); end if (node(j,1)=0 | node(j,1)=3)& node(j,2)=1 afterward(j,0,2); end if (node(j,1)=1 & node(j,2)=1 | node(j,1)=0 & node(j,2)=2) afterward(j,2,0); end end%display(open_list);open_list(r_row(1),:)= ;index=index-1;%open表个数减1%display(open_list); end%从左岸到右岸,船上传教士x个,野人y个 function =forward(z,x,y)global n;global node open_list index;node(n,1)=node(z,1)-x;node(n,2)=node(z,2)-y;node(n,3)=0;r=search(z);if(r) returnendnode(z,4)=0;node(n,4)=1;node(n,5)=z;s=destination();if s node(n,4)=-1;endindex=index+1;open_list(index,1)=n;n=n+1;%从右岸到左岸,船上传教士x个,野人y个 function =afterward(z,x,y)global n;global node open_list index;node(n,1)=node(z,1)+x;node(n,2)=node(z,2)+y;node(n,3)=1;r=search(z);if(r) returnendnode(z,4)=0;node(n,4)=1;node(n,5)=z;s=destination();if s node(n,4)=-1;endindex=index+1;open_list(index,1)=n;n=n+1;%function r=search(x)global n node;i=x;while node(i,5)=-1 if node(i,1)=node(n,1) & node(i,2)=node
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业现代化项目建议书编制与投资合作合同模板
- 零售药店营业员药品销售渠道拓展与客户关系维护合同
- 金融服务行业生产经理聘任与金融科技应用合同
- 药师资格证租赁与药品销售渠道拓展合同
- 智能家居项目合作退伙协议范本及知识产权归属
- 物流项目建议书编制与供应链优化合同
- 贸易经纪人合同性质界定及法律适用协议
- 黑龙江省商业地产购买与租赁权设立合同
- 业务外包结算管理办法
- 街道土地流出管理办法
- GB/T 45637-2025电动牙刷性能测试方法
- 菜鸟驿站合伙合同协议
- 《血小板功能检测》课件
- 2025年呼伦贝尔农垦集团有限公司工作人员招聘考试试题
- 公司志编纂工作方案
- 新人教版物理八年级下册知识点总结-物理八年级下册考点人教版
- 抗战胜利70周年主题班会教案
- 2025年九年级语文上册课后习题参考答案
- 2025年保安证考试沟通能力试题及答案
- 全套课件-工程建设监理概论
- 餐饮服务与数字化运营 习题及答案 项目三
评论
0/150
提交评论