人工智能实验 教士野人.docVIP

  • 3
  • 0
  • 约6.59千字
  • 约 9页
  • 2018-11-06 发布于江苏
  • 举报
人工智能实验 教士野人

人工智能实验报告 题目:求解传教士和野人问题 姓名: 班级: 学号: 学院:计算机科学与信息 专业:计算机科学与技术 指导教师: 日期:2011年12月6日 一、实验目的: 复习经典谓词演算中的归结原理,掌握人工智能程序设计语言Prolog,理解通过搜索求解问题实现人工智能的思想。 二、实验原理: 谓词演算中的消解法。 三、实验内容: 设有3个传教士和3个野人同在河的左岸,他们都要到对岸去;河里只有一条船,他们都会划船,但每次渡船至多只能乘两人;如果在任何一边河岸上,野人的数量超过传教士,野人就要吃掉传教士,问怎样才能用船将3个传教士和3个野人从左岸都渡到右岸,又不会发生传教士被吃的事件呢?通过Prolog程序,给出乘船过河的动作序列。 四、实验描述及要求: 设计该问题的状态。例如:((左岸牧师数,左岸野人数),(右岸牧师数,右岸野人数),船的位置)。 定义目标状态。这里是:((0,0),(3,3),1) 描述可能的动作。船上所能够载人的状态就是可能的操作。用谓词move/2表示。 判断合法状态 深度优先搜索 五、实验结果: 六:实验代码 #include stdafx.h #include cstdio #include cstdlib #include iostream using namespace std; #define FAIL ((struct BOAT *)-1) #define M 3 #define C 3 #define K 2 struct Lift { int m; int c; int b; struct Lift *pNext; }; struct BOAT { int m; int c; struct BOAT *pNext; }; struct BOAT *g_pBoatSet = NULL; int Equal(struct Lift *pLift1, struct Lift *pLift2) { if (pLift1-m == pLift2-m pLift1-c == pLift2-c pLift1-b == pLift2-b) return 1; else return 0; } struct Lift *NewLift(int m, int c, int b) { struct Lift *pLift = NULL; pLift = (Lift*)malloc(sizeof(struct Lift)); if (pLift == NULL) return NULL; pLift-m = m; pLift-c = c; pLift-b = b; pLift-pNext = NULL; return pLift; } struct BOAT *NewBoat(int m, int c) { struct BOAT *pBoat = NULL; pBoat = (BOAT*)malloc(sizeof(struct BOAT)); if (pBoat == NULL) return NULL; pBoat-m = m; pBoat-c = c; pBoat-pNext = NULL; return pBoat; } struct BOAT *InitBoats(void) { struct BOAT *pBoats = NULL, *pBoat = NULL; int i, j; for (i = 0; i = 2; i++) { for (j = 0; j = 2; j++) { if(i+j=2) {

文档评论(0)

1亿VIP精品文档

相关文档