Javascript 简单寻路

Javascript 简单寻路,javascript,breadth-first-search,path-finding,a-star,2d-games,Javascript,Breadth First Search,Path Finding,A Star,2d Games,我试着按照令人敬畏的介绍进入一个*寻路算法。然而,出于某种原因,我的JS实现倾向于90度路径:,尽管本文中的示例表现不同。从frontier数组中弹出/移出next节点可能有一些条件?我不知道如何使其与python示例的行为相同。您的实现非常好。您的解决方案与另一个解决方案的区别在于如何在开放列表中打破联系,即如果您有4个成本相同的节点,那么下一个要扩展的节点是哪一个。A*选择一个,而您的算法选择另一个。更改您的选择以选择下一个要进行不同探索的节点应足以为您提供不同的最短路径解决方案 这在游戏地

我试着按照令人敬畏的介绍进入一个*寻路算法。然而,出于某种原因,我的JS实现倾向于90度路径:,尽管本文中的示例表现不同。从
frontier
数组中弹出/移出
next
节点可能有一些条件?我不知道如何使其与python示例的行为相同。

您的实现非常好。您的解决方案与另一个解决方案的区别在于如何在开放列表中打破联系,即如果您有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*),看看这个。

这对我来说似乎是最短的路径。你在期待什么?(python示例的行为如何?)(也许你需要在曼哈顿的距离内复习一下)@Wyck它是最短的。但是,如果您查看本文的示例,大多数路径都是对角的,而不是90度。长度相同,但看起来更自然。非常感谢您的输入。然而,我发现我想要的是: