![人工智能野人与修道士问题_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-1/13/2f58ee5e-6c7d-43f4-9829-b3fbd5fa2650/2f58ee5e-6c7d-43f4-9829-b3fbd5fa26501.gif)
![人工智能野人与修道士问题_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-1/13/2f58ee5e-6c7d-43f4-9829-b3fbd5fa2650/2f58ee5e-6c7d-43f4-9829-b3fbd5fa26502.gif)
![人工智能野人与修道士问题_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-1/13/2f58ee5e-6c7d-43f4-9829-b3fbd5fa2650/2f58ee5e-6c7d-43f4-9829-b3fbd5fa26503.gif)
![人工智能野人与修道士问题_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-1/13/2f58ee5e-6c7d-43f4-9829-b3fbd5fa2650/2f58ee5e-6c7d-43f4-9829-b3fbd5fa26504.gif)
![人工智能野人与修道士问题_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-1/13/2f58ee5e-6c7d-43f4-9829-b3fbd5fa2650/2f58ee5e-6c7d-43f4-9829-b3fbd5fa26505.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、人工智能:野人与修道士问题Missionaries-and-Cannibals Problem :三个野人与三个传教士来到河边,打算乘一只船从右岸渡到左岸去,该船的最大负载能力为两个人。在任何时候,如果野人人数超过传 教士人数,那么野人就会把传教士吃掉。用状态空间法表示修道士与野人问题并设计编写计算机程序求问题的解。左L右R修道士 M船B野人C从上图可知,修道士、野人和船一共有六种可能,MCBMCB以表LLLRRR示为q=( M C, B),其中m表示修道士的数目(0、1、2、3)、c表示 野人的数目(0、1、2、3)、b表示船在左岸(1)或右岸(0)。1、( m,c, b)2、:s0(3,3
2、,1) s8(1,3,1) s16(3,3,0) s24(1,3,0)s1(3,2,1) s9(1,2,1) s17(3,2,0) s25(1,2,0)s2(3,1,1) s10(1,1,1) s18(3,1,0) s26(1,1,0)s3(3,0,1) s11(1,0,1) s19(3,0,0) s27(1,0,0)s4(2,3,1) s12(0,3,1) s20(2,3,0) s28(0,3,0)s5(2,2,1) s13(0,2,1) s21(2,2,0) s29(0,2,0)s6(2,1,1) s14(0,1,1) s22(2,1,0) s30(0,1,0)s7(2,0,1) s15(
3、0,0,1) s23(2,0,0) s31(0,0,0)初始状态:( 3,3,1 )目标状态:( 0,0,0 )3、L:把i个修道士,j个野人从河的左岸送到右岸ijR:把i个修道士,j个野人从河的右岸送到左岸ij整个问题就抽象成了怎样从初始状态经中间的一系列状态达到目标状态。问 题状态的改变是通过划船渡河来引发的,所以合理的渡河操作就成了通常所说 的算符,根据题目要求,可以得出以下 5 个算符(按照渡船方向的不同,也可以 理解为 10 个算符):渡1野人、渡1牧师、渡1野人1牧师、渡2野人、渡2牧师即: L01或R01, L10 或 R10, L11 或 R11, L02 或 R02, L20
4、 或 R20 4L02 R01 S18L01 L02 R01 L20 S0 S17 S1 S14 S2 S26S21 L11 R10R11S10 L11 R10L02 R01 L20 S31 S30 S29 S14 S12 S5 L01S18 R21 L025算法:在应用状态空间表示和搜索方法时,用( M C, B)来表示状态描述, 其中M和C分别表示在左岸的传教士与野人数。B为1表示船在左岸,为0表示在右岸。于是初始状态为( 0, 0, 0),目标状态为( 3, 3, 1)。我们将此问题用图 表示出来,首先生成各种安全状态结点,存放在顶点向量中;在建立了图的邻接矩阵存储结构后,利用深度优先搜
5、索思想从顶点( 0,0,0)到顶点(3,3,1)的一条简单路径。#include <stdio.h>#include <math.h>#define VEX_NUM 18 /* 最大顶点个数 */ typedef struct /* 点类型 */int Missionary,Cannibal,Boat; Vextype;typedef structint vexnum ; /* 图的当前顶点数 */Vextype vexsVEX_NUM; /* 顶点向量 */int adjVEX_NUMVEX_NUM; /* 邻接矩阵 */ AdjGraph;int visitedVE
6、X_NUM; /* 遍历过程中进行标记用的辅助数组 int pathVEX_NUM;/*查找顶点(M C, B)在顶点向量中的位置*/int locate(AdjGraph *G,int M,int C,int B) int i;for (i=0;i<G->vexnum;i+)if ( G->vexsi.Missionary=M && G->vexsi.Cannibal=C && G->vexsi.Boat=B )return(i);return(-1);*/定义图的顶/*判断状态(M C, B)是否合理*/int is_safe(
7、int M,int C,int B) if (M=C)if (M=3)if (B=0)return (0);elsereturn (1); else if (M=0) if (B=1)return (0);elsereturn (1);elsereturn (1);else if (M=0)|(M=3)return (1);elsereturn (0); /* 检查第 i 个状态和第 j 个状态是否可转换 */int is_connected(AdjGraph *G,int i,int j) int k=0;while (G->vexsi.Boat=1) if ( G->vexsj
8、.Missionary - G->vexsi.Missionary = -1 && G->vexsj.Cannibal=G->vexsi.Cannibal ) if ( G->vexsj.Missionary=G->vexsi.Missionary && G->vexsj.Cannibal - G->vexsi.Cannibal= -1 ) k+;if ( G->vexsj.Missionary - G->vexsi.Missionary= -2 &&G->vexsj.Cannibal=
9、G->vexsi.Cannibal )k+;if ( G->vexsj.Missionary = G->vexsi.Missionary &&G->vexsj.Cannibal - G->vexsi.Cannibal = -2 ) k+;if ( G->vexsj.Missionary - G->vexsi.Missionary = -1 &&G->vexsj.Cannibal - G->vexsi.Cannibal = -1 ) k+;if ( G->vexsj.Boat=0 && k
10、>=1)return (1);elsereturn (0);while (G->vexsi.Boat=0) if ( G->vexsj.Missionary - G->vexsi.Missionary=1 && G->vexsj.Cannibal =G->vexsi.Cannibal ) k+;if ( G->vexsj.Missionary = G->vexsi.Missionary &&G->vexsj.Cannibal - G->vexsi.Cannibal= 1 )k+;if ( G->v
11、exsj.Missionary - G->vexsi.Missionary= 2 && G->vexsj.Cannibal= G->vexsi.Cannibal ) k+;if ( G->vexsj.Missionary = G->vexsi.Missionary &&G->vexsj.Cannibal - G->vexsi.Cannibal =2 ) k+;if ( G->vexsj.Missionary - G->vexsi.Missionary = 1 &&G->vexsj.Can
12、nibal - G->vexsi.Cannibal =1 ) k+;if ( G->vexsj.Boat = 1 && k>=1 )return (1);elsereturn (0);void CreateG(AdjGraph *G) int i,j,M,C,B;i=0;for (M=0;M<=3;M+) /* 形成所有合理的状态结点 */for (C=0;C<=3;C+)for (B=0;B<=1;B+)if (is_safe(M,C,B) G->vexsi.Missionary=M;G->vexsi.Cannibal=C;G-
13、>vexsi.Boat=B;i+;G->vexnum=i;for (i=0;i<G->vexnum;i+) /* 生成邻接矩阵 */for (j=0;j<G->vexnum;j+)if (is_connected(G,i,j)G->adjij=G->adjji=1;elseG->adjij=G->adjji=0;return;void DFS_path(AdjGraph *G,int u,int v) /*求从 U 到 V 的简单路径 */ int j;visitedu=1;for (j=0;j<G->vexnum;j+)
14、if ( G->adjuj=1 && visitedj=0 && visitedv=0 ) pathu=j;DFS_path(G,j,v); /* 深度优先搜索 */void print_path(AdjGraph *G,int u,int v) /*输出从 U 到 V 的简单路径*/ int k=u;while (k!=v) printf("(%d,%d,%d)n",G->vexsk.Missionary,G->vexsk.Cannibal, G->vexsk.Boat);k=pathk;printf("(%d,%d,%d)n",G->vexsk.Missionary,G->vexsk.Cannibal, G->vexsk.Boat);getchar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现代企业如何通过公关活动吸引目标客户
- 理论与实践在文化传承中寻求创新发展
- Module5 Unit1 He is playing the suona,but the phone rings(说课稿)-2023-2024学年外研版(三起)英语六年级下册
- 8《上课了》说课稿-2023-2024学年道德与法治一年级上册统编版001
- 2023九年级数学上册 第23章 图形的相似23.4 中位线说课稿 (新版)华东师大版
- 9 知法守法 依法维权 说课稿 -2023-2024学年道德与法治六年级上册(统编版)
- 2024年四年级英语上册 Module 4 The world around us Unit 11 Shapes说课稿 牛津沪教版(三起)
- Unit8 I can do this for you 第三课时(说课稿)-2024-2025学年译林版(三起)(2024)英语三年级上册
- 3 光的传播会遇到阻碍吗 说课稿-2024-2025学年科学五年级上册教科版
- 2024年高中语文 第5课 杜甫诗三首说课稿1 新人教版必修3
- GB 12710-2024焦化安全规范
- IT系统灾备和容灾解决方案项目设计方案
- 青岛版二年级数学下册(六三制)全册课件【完整版】
- 马蹄焰玻璃窑炉设计技术培训-课件
- 2023年主治医师(中级)-眼科学(中级)代码:334考试历年真题集锦附答案
- 电力安全工作规程-(电网建设部分)
- 新加坡小学二年级英语试卷practice 2
- 小学五年级英语20篇英文阅读理解(答案附在最后)
- 2023年辽宁铁道职业技术学院高职单招(英语)试题库含答案解析
- GB/T 23800-2009有机热载体热稳定性测定法
- T-SFSF 000012-2021 食品生产企业有害生物风险管理指南
评论
0/150
提交评论