我游戏中的城市基本上是道路和十字路口的图表。
每条道路都有一个开始和结束交叉点的参考。
每个交叉路口都有对顶部,左侧,底部,右侧道路的引用,如果它是3路,2路交叉口等,则为null。
道路是矩形。
鉴于此,有没有办法生成从A路到B路的路径? (比A *更简单?
由于
答案 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非常简单。