我正在尝试遵循this对A *寻路算法的精彩介绍。但是,出于某种原因,我BFS algorithm的JS实现趋向于90度路径:https://codepen.io/stee1rat/pen/GyeyzB?editors=0010,尽管文章中的示例表现不同。也许应该有一些条件从next
数组中弹出/移出frontier
节点?我无法弄清楚如何使它的行为与python示例的行为相同。
答案 0 :(得分:1)
您的实施完全没问题。您的解决方案与另一个解决方案之间的区别在于您如何在打开的列表中断开关系,即如果您有4个具有相同成本的节点,哪一个是您要扩展的下一个节点。 A *正在选择一个,您的算法选择另一个。更改选择以选择下一个要以不同方式探索的节点应该足以为您提供不同的最短路径解决方案。
这经常发生在游戏地图中,请看这个例子:
S _ _ _
_ _ _ _
_ _ _ _
_ _ _ G
让我们只考虑垂直和水平运动,让所有运动成本相同,有许多最短路径解决方案:
S 1 2 3
_ _ _ 4
_ _ _ 5
_ _ _ G
S _ _ _
1 _ _ _
2 _ _ _
3 4 5 G
S _ _ _
1 2 3 _
_ _ 4 _
_ _ 5 G
...
如果你想深化你在边境打破关系的知识(对于双向A *),请看一下paper。