在图中寻找路径? (全球定位系统)?
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:我想这取决于他所有的道路是否都一样长。 道路长短不一。以上是关于在图中寻找路径? (全球定位系统)?的主要内容,如果未能解决你的问题,请参考以下文章