在图中寻找路径? (全球定位系统)?

Posted

技术标签:

【中文标题】在图中寻找路径? (全球定位系统)?【英文标题】:Path finding in a graph? (GPS)? 【发布时间】:2012-10-09 23:05:06 【问题描述】:

我游戏中的城市本质上是道路和十字路口的图表。

每条道路都有起点和终点交叉口的参考。

每个交叉口都有一个对顶部、左侧、底部、右侧道路的引用,如果是 3 路、2 路交叉口等,则为 null。

道路是矩形。

鉴于此,有没有办法生成从 A 路到 B 路的路径? (比说 A* 更简单的东西?

谢谢

【问题讨论】:

【参考方案1】:

由于图表未加权,您可以尝试BFS - 虽然它不知情并且可能会比 A* 算法慢(对 A* 具有合理的启发式函数)。

您可以通过执行bi-directional BFS 来加快它的速度——这在未加权图中也是最佳的,并且应该比标准 BFS 快得多。 双向 BFS 的想法很简单:在“同一时间”(一个接一个)从头到尾执行 BFS 步骤(深度 1、深度 2...),并且一次你发现两个搜索的前沿相交 - 你有你的路径。 它要快得多,因为每个方向只搜索到中间,给你总共O(2 * B^(d/2)) = O(B^(d/2)) 个节点来探索(其中d 是最佳解决方案的深度,B 是分支因子 - 4在您的情况下),而常规 BFS 是 O(B^d)

【讨论】:

【参考方案2】:

如果您不想自己实现所有路径查找算法,我强烈推荐JGraphT。它是满足您所有图形需求的优秀库。它可以通过返回边列表为您找到最短路径。

不过,它当然有一个学习曲线。我一开始想使用 WeightDirectedGraphs,后来在谷歌上搜索了一下才找到合适的使用方法。

编辑: 我刚刚注意到您将您的帖子标记为 Java 和 C++,但 JGraphT 是一个 Java 库(正如名称中的 J 所暗示的那样)。

【讨论】:

【参考方案3】:

Dijkstra's algorithm 很简单。

【讨论】:

请注意,在讨论未加权图时,没有理由使用 Dijkstra 算法 - 与简单的 BFS 相比,它的效率更低且更难实现。 @amit:我想这取决于他所有的道路是否都一样长。 道路长短不一。

以上是关于在图中寻找路径? (全球定位系统)?的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 1971. 寻找图中是否存在路径

在给定起始顶点和深度限制的循环定向图中寻找所有可能的路径。

图论刷题-5力扣 1971. 寻找图中是否存在路径

java 寻找图中两个点间所有可达路径

java 寻找图中两个点间所有可达路径

使用 BFS/DFS 寻找有向无环图中权重最大的路径