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

时间:2012-10-09 23:05:06

标签: java c++ algorithm

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

每条道路都有一个开始和结束交叉点的参考。

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

道路是矩形。

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

由于

3 个答案:

答案 0 :(得分:5)

由于图表未加权,你可以尝试BFS - 虽然它是不知情的,但可能比A *算法慢(对A *有合理的启发式功能)。

您可以通过执行bi-directional BFS来加快速度 - 这在未加权的图形中也是最佳的,并且应该比标准BFS快得多。
双向BFS的想法很简单:在“同一时间”(一个接一个)开始和结束时进行BFS步骤(深度1,深度2,...),并且一旦你发现两个搜索的前端相交 - 你就有了自己的道路。
它的速度要快得多,因为每个方向只搜索到中间,为您提供总共O(2 * B^(d/2)) = O(B^(d/2))个节点进行探索(其中d是最佳解的深度,{{1} }是分支因子 - 在你的情况下是4),而常规BFS是B

答案 1 :(得分:0)

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

但是,它肯定有一个学习曲线。我开始想要使用WeightDirectedGraphs,并花了一些谷歌搜索来找到合适的方式来使用它。

编辑: 我刚刚注意到你将你的帖子标记为Java和C ++,但JGraphT是一个Java库(顾名思义就是J)。

答案 2 :(得分:0)

Dijkstra's algorithm非常简单。