假设我们有一个8谜题问题,并且空瓦片用ZERO标记。目标状态为:
- 1 2 3
- 4 5 6
- 7 8 0
初始状态为:
- 0 1 3
- 8 2 4
- 7 6 5
我的问题是,a*树中的孩子有可能"复制"或拥有与其祖先相同的状态吗?或者"f(n)=g(h)+h(n)"[其中g(h?。。例如,从初始状态:
- 0 1 3
- 8 2 4
- 7 6 5
然后发生以下状态,从而在A*树中生成更多的子节点
(动作:向上)
- 8 1 3
- 0 2 4
- 7 6 5
动作:左
- 8 1 3
- 2 0 4
- 7 6 5
动作:关闭
- 8 0 3
- 2 1 4
- 7 6 5
动作:右侧
- 0 8 3
- 2 1 4
- 7 6 5
动作:向上
- 2 8 3
- 0 1 4
- 7 6 5
然后动作:左、下、右、上、左、下和右发生。。。从而使状态回到初始状态:
- 0 1 3
- 8 2 4
- 7 6 5
这在A*搜索8个谜题时可能吗?还是f(n)会处理这个问题?感谢那些愿意回答的人,任何帮助都将不胜感激!
您不必担心您在问题中描述的情况。在A*的第一次迭代中,开始状态被扩展,这导致算法将该节点包含在具有相关成本的CLOSED列表中(由于它是初始状态,因此为零)。如果您再次找到该状态作为任何其他状态的后续状态,则算法将在CLOSED列表中以较低的成本找到该状态,并且它将不会再次扩展,从而丢弃搜索树中的该分支。
如果您打算在Java中实现这个问题,也许您会发现使用像Hipster这样的启发式搜索库很有用。这个库是开源的(见Github),有一些用它解决搜索问题的例子。包括用A*解决的8个难题。
我希望我的答案能有所帮助,