algorithm - 基于二维网格的寻路 : Cheapest way/algorithm to find out if a location is reachable

标签 algorithm 2d path-finding a-star

<分区>

我的主要寻路是通过 aStar 算法的实现完成的。只要有可用路径,性能就很好。

但是,如果没有,则可能会解析所有可用节点,直到您得出没有路径的结论。

我能想到的最坏情况是在目标位置相对较近的地方几乎没有障碍物。

到目前为止,我提出的一些可能会提高整体性能的想法:

  • 找到并执行一个成本更低的寻路算法 n,该算法仅用于确定目标是否可达,如果可达,则运行 aStar 以获取实际路径。

  • 在指定半径内收集目标节点周围所有不可行走的节点,并查看它们是否全部链接。如果是,则目标是“无法达到”并且无法达到。 不必为起始节点执行等效操作,因为收集节点的 Stars 方法本质上就是这样做的。

所以我在这里要问的是,是否有人有一些要点/想法我可以添加到我的列表中,或者指出我可以使用的更便宜的寻路算法的方向,以确保是否有一条路

最佳答案

第一个idea,应该细化!

由于您的启发式算法,A* 将大部分时间花在目标周围, 因此在它周围创建了一个“访问过的”墙。

所以我认为您可以检查访问过的方 block 是否继续“墙”, 如果您找到包含目标但不包含源的闭合连续路径,则您无需进一步搜索。

第二个想法,不完整,但可能会减少“丢失”的时间,
使用双向 A*,Source 运行到 Destination,但同时 Destination 发现它是通往 Source 的路。

看看https://qiao.github.io/PathFinding.js/visual/了解它的行为方式。

关于algorithm - 基于二维网格的寻路 : Cheapest way/algorithm to find out if a location is reachable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40282703/

相关文章:

python - 查找两个节点之间路径数的更快算法

algorithm - 最大化表的总和,其中每个数字必须来自唯一的行和列

JavaScript:是否可以从矩形中切出一个形状以在其中制作一个透明的孔?

寻找穿墙最短路径的算法

java - A* star openlist 未按预期工作

algorithm - 如何检测添加 block 后永远不会成为最短路径一部分的网格上的正方形?

c++ - 图中的路径数

javascript - 递归算法的空间复杂度是否一定至少与递归调用的深度一样大?

c++将二维数组传递给函数

javascript - 如何在JavaScript中计算旋转3D立方体的x和y坐标?