|
发表于 2004-9-24 08:50:26
|
显示全部楼层
一种苯办法:
从初始状态起,穷举所有的可能,记下每次动作(过河或返回)之后的状态(河这边的东西,河对岸的东西),生成一棵树,树的节点记录状态,边的权值记录动作.如果这种状态是不允许的(比如把狼和羊放一起),就不要这个节点.
按层次遍历这棵树,找到第一个符合结束条件的状态,从初始状态到这个状态所经历的边的动作连起来就是所求的最短步骤.
以上两步可以合为一步来做,如果在生成树的时候就按层次遍历的顺序.
我给的附件是一张图,这只是个示意,为了画图方便我把动作写在了节点上.这张图中明显有不必要的节点,比如把狼带过去再带回来又恢复初态是没必要的,在编程的时候当然要有所判断. |
|