野人过河问题描述如下.doc

野人过河问题描述如下

传教士和野人渡河问题 刘宪国 050422023 野人过河问题描述如下: 有三个传教士和三个野人过河,只有一条能装下两个人的船,在河的任何一方或者船上,如果野人的人数大于传教士的人数,那么传教士就会有危险. 一、算法分析 先来看看问题的初始状态和目标状态,假设分为甲岸和乙岸: 初始状态:甲岸,3野人,3传教士; 乙岸,0野人,0传教士; 船停在甲岸,船上有0个人; 目标状态:甲岸,0野人,0传教士; 乙岸,3野人,3传教士; 船停在乙岸,船上有0个人; 整个问题就抽象成了怎样从初始状态经中间的一系列状态达到目标状态。问题状态的改变是通过划船渡河来引发的,所以合理的渡河操作就成了通常所说的算符,根据题目要求,可以得出以下5个算符(按照渡船方向的不同,也可以理解为10个算符): 渡1野人、渡1传教士、渡1野人1传教士、渡2野人、渡2传教士 。 算符知道以后,剩下的核心问题就是搜索方法了,本文采用深度优先搜索,通过一个FindNext(…)函数找出下一步可以进行的渡河操作中的最优操作,如果没有找到则返回其父节点,看看是否有其它兄弟节点可以扩展,然后用Process(…)函数递规调用FindNext(…),一级一级的向后扩展。 搜索中采用的一些规则如下: 1、渡船优先规则:甲岸一次运走的人越多越好(即甲岸运多人优先),同时野人优先运走; 乙岸一次运走的人越少越好(即

文档评论(0)

1亿VIP精品文档

相关文档