【发布时间】:2012-12-13 09:45:25
【问题描述】:
关于三壶水的问题:
我们有 3 个水壶,第一个水壶的容量是 12,第二个水壶的容量是 8,第三个水壶的容量是 3。 初始状态为:(0,0,0) 后继函数是:
- 添加:完全填满锯齿
- 倒入另一个:将一个水壶的内容物倒入第二个(直到第一个空或第二个完全装满)
- Empty 是:清空 jar 中的所有内容
目标状态为:(1,1,1)
我想画出它的状态树。我自己做的,但我不确定它是否正确?
(0,0,0)
/ | \
/ | \
/ | \
(12,0,0) (0,8,0) (0,0,3)
(12,0,0)的子节点是:(12,0,0),(12,8,0),(12,8,3),(0,8,3),(0 ,0,3),(0,0,0),(9,8,3),(12,8,0),(4,8,3),(12,0,3),(12,5 ,3),(12,5,3),(12,8,0)
其中 (12,0,0),(0,0,0)==>因为它在根目录中,(12,8,0)==> 是失败节点,我们不展开它们。
我认为如果我扩展 (0,0,3),我将达到我的目标状态: 节点 (0,0,3) 的子节点:(3,0,0),(0,3,0),(0,0,3),(1,1,1) (1,1,1 ) 我的目标状态是对的吗?
问题:我理解正确吗?这些是状态和生成的树吗?
【问题讨论】:
-
这不是真正的编程问题吧?
-
@musefan:是的。例如,Die-Hard Problem 可以用 A* 求解。这是使用归约图解决问题的基础培训。
-
那么 OP 希望用什么编程语言来回答?这更多是关于编程的算法。
-
算法在这里非常好。我们不仅回答“如何在 C 中拆分字符串”,还回答算法,可以在以后翻译成任何 PL 中的代码,这与编程非常相关,在这里非常好。
-
hmmm...我以为我们有一个专门的算法站点...不过似乎没有
标签: algorithm artificial-intelligence graph-algorithm