农夫携物过河程序.docVIP

  • 8
  • 0
  • 约9.42千字
  • 约 15页
  • 2020-11-13 发布于湖北
  • 举报
题目内容:有一农夫要将自己的羊、蔬菜和狼等3件物品运过河。但农夫过河时所用的船每次最多只能装其中的一件物品,而这3件物品之间又存在一定的制约关系:羊不能单独和狼以及不能和蔬菜在一起,因为狼要吃羊,羊也能吃蔬菜。试构造出问题模式以编程实现这一问题的求解。 问题分析和任务定义: 根据对象的状态分为过河(1)和不过河(0),此对象集合就构成了一个状态空间。问题就是在这个状态空间内搜索一条从开始状态到结束状态的安全路径。显然,其初始状态为四对象都不过河,结束状态为四对象全部过河。这里用无向图来处理,并采用邻接矩阵存储。对于农夫,狼,羊,蔬菜组成一个4位向量,即图的顶点(F,W,S,V),状态空间为16,初始状态为(0000),目标为(1111)。解决问题的方法是,找到所有的安全状态,并在其中搜索出一条(0000)到(1111)的路径。对当前对象是否安全的判断,若当农夫与羊不在一起时,狼与羊或羊与蔬菜在一起是不安全的,其他情况是安全的。搜索一条可行路径时,采用深度优先搜索DFS_path,每个时刻探索一条路径,并记录访问过的合法状态,一直向前探视,直到走不通时回溯。显然,应该用数组来保存访问过的状态,以便回溯。显然农夫每次状态都在改变,最多也就能带一件东西过河,故搜索条件是,在顶点(F,W,S,V)的转换中,狼,羊,蔬菜三者的状态不能大于一个,即只有一个发生改变或者都不变。 数据的输入形式

文档评论(0)

1亿VIP精品文档

相关文档