我目前正在开发一个项目,该项目的矢量包含大约800点的X和Y坐标。这些点代表线路的电网络。 我的目标是计算点A和点B之间的最短距离路径,该路径可以是或者不能沿着包含电线的X-Y坐标的矢量给出的路径定位。
我已经阅读过有关Dijkstra算法的内容,但由于我对它并不熟悉,我不确定是否应该朝那个方向前进。如果我能得到你的任何反馈或评论,我会非常感激,可以指导我解决这个问题。
答案 0 :(得分:0)
任何寻路算法都取决于路径,点只是毫无意义。你现在拥有的是“航路点”列表。但是你还没有解释这些点是如何连接的。例如,如果任何和每个点彼此连接点,则最短距离将仅仅是A& A之间的腹腔距离。 B. - 我也不确定你的电线的X-Y坐标是什么意思,这样的“线”总是有一个开始&结束位置?
因此,第一步是不仅向x,y坐标添加每个点,还添加可连接点列表。
一旦你这样做,你就可以开始使用寻路算法(在这种情况下,A *看起来比Dijkstra更好)。它只是一个标准实现,每个“成本”是一个点之间的实际距离。 (对于A *,启发式将是到终点的毕达哥拉斯距离)。
有关A *(和其他算法)的优秀教程,您应该检查Amit's pages
编辑,回复评论。
似乎第一步是将一组线段转换为“点”。我将通过这个方式:
collection AllPoints {containing Location & LinksToOtherPoints}
for each Segment
get start/end Point of Segment
if Point.Location is not in allPoints
add Point to AllPoints
add the other Point of Segment to LinksToOtherPoints
然后你只需要一个包含所有积分的列表。他们之间的联系。因为你必须经常搜索allPoints集合,我建议将它存储在二叉树结构中(设置?)。
答案 1 :(得分:0)
为了计算最短的路径Dijakstra会很好。
使用A*可以获得更快的结果,memoization使用距离的最佳猜测,以便将搜索重点放在正确的方向,从而更快地到达目的地。
如果您反复查询相同的数据集,那么Floyd-Warshall algorithm就可以了。
那些推荐使用暴力算法的人是傻瓜 - 值得花些时间学习如何编写有效的解决方案。但您可以使用{{3}}计算所有点之间的最短路径。不幸的是,这不会告诉你 的最短路径 它是多长时间。
答案 2 :(得分:-1)
只计算所有可能路径的距离并选择最短路径。 现代PC没有800条路径。你甚至都不会注意到它。