【发布时间】:2016-03-27 13:20:07
【问题描述】:
这个问题我想了很久,还是不知道怎么解决。
问题如下:
我们有 3 只羔羊和 3 只狼在一边,我们必须让它们过河到另一边。一开始看起来很容易,直到我在这些困难的情况下停下来:
- 狼不能超过羔羊,这意味着羔羊可以大于或等于狼。
- 把动物运到对岸的船,最多只能载2个
- 船必须始终载有动物,这意味着您不能移动空船。
问题必须通过搜索算法来解决,例如 A* 或 BFS 等。
我们都知道,在您提供图形作为输入之前,这些算法无法工作,这就是问题所在。
我们如何从 3 只羔羊和 3 只狼创建一个图形?
我想了很多次,我想到的唯一方法就是尽一切可能。对我来说听起来不错,但仍然没有给我任何进展,因为问题仍然相同,如何实现它或将其编写为 Python 代码以将此图传递给算法以便算法可以解决它?
【问题讨论】:
-
A* 和 BFS 都不需要预先计算整个图
-
不要将状态(在每个节点上)视为只是羔羊和狼,而是将船添加到状态向量中。有效的过渡会移动船并增加或减少动物数量。
-
@IanMercer 我没听懂,你能详细说明一些代码和示例吗?
-
图形方法:节点是 (L1,L2,L3,W1,W2,W3,B),L 是羔羊所在的一侧,w 是狼所在的一侧,B 是船的一侧。您的路径应该是从 (0,0,0,1,1,1,0) 到 (1,1,1,0,0,0,0) 或 (1,1,1,0,0,0) ,1)。边缘是关于上述限制的每个节点的每个有效转换。有了这个,您可以使用 BFS 轻松设计算法。这就是您将获得的所有帮助;)
-
@TerryStorm 对不起,你让我更困惑了 >_
标签: python algorithm a-star breadth-first-search