【问题标题】:Simple pathfinding简单的寻路
【发布时间】:2018-01-22 15:11:15
【问题描述】:

我正在尝试关注this A* 寻路算法的精彩介绍。然而,出于某种原因,我的BFS algorithm 的 JS 实现倾向于 90 度路径:https://codepen.io/stee1rat/pen/GyeyzB?editors=0010,尽管文章中的示例表现不同。也许应该有一些条件从frontier 数组中弹出/移出next 节点?我不知道如何使它的行为与 python 示例相同。

【问题讨论】:

  • 这对我来说似乎是最短的路径。你期待什么? (python 示例的行为如何?)(也许您需要在曼哈顿距离 en.wikipedia.org/wiki/Taxicab_geometry 进行复习)
  • @Wyck 它是最短的。但是,如果您查看文章的示例,大多数路径都是对角线,而不是 90 度。长度相同,但看起来更自然。

标签: javascript breadth-first-search path-finding a-star 2d-games


【解决方案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

【讨论】:

猜你喜欢
  • 2017-09-12
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 2018-06-21
  • 2011-06-04
相关资源
最近更新 更多