假设我们有8个拼图问题,并且空拼贴由ZERO标记。 目标状态是:
初始状态是:
...我的问题是,A *树中的孩子是否有可能“复制”或具有相同的祖先状态?或将“f(n)= g(h)+ h(n)”[其中g(h)=移动的数量...... h(n)=每个瓦片的曼哈顿距离的总和]已经使这不可能因此我不需要担心这个问题?例如,从最初的状态:
然后发生以下状态,从而在A *树中生成更多子节点
(行动:向上)
行动:离开
行动:向下
行动:对
行动:向上
...然后动作:向左,向下,向右,向上,向左,向下,向右发生......从而使状态回到初始状态:
这可能是在A *搜索8拼图吗?还是f(n)会处理这个问题?感谢那些愿意回答的人,感谢任何帮助!
答案 0 :(得分:0)
您不必担心您在问题中描述的情况。在A *的第一次迭代中扩展了开始状态,这导致算法在CLOSED列表中包含该节点以及相关的成本(由于它是初始状态,因此为零)。如果再次发现该状态为任何其他状态的后继状态,则该算法将在CLOSED列表中以较低的成本找到该状态,并且不会再次展开,在搜索树中丢弃该分支。
如果您要在Java中实现此问题,也许您会发现使用像Hipster这样的启发式搜索库很有用。这个库是开源的(参见Github),并且解决了some examples个搜索问题。包括8-puzzle problem solved with A*。
我希望我的答案有所帮助,