利用高程寻找最短路径的图算法

时间:2014-01-13 00:02:20

标签: algorithm graph-algorithm

考虑网格(X by Y)。网格中的每个点都具有值Z.现在,在该网格中有i个指定的检查点。考虑网格具有等级D.该值D意味着您可以通过仅跨越具有最大值D的路径从任何检查点到达另一个检查点。路径的长度由最大高度差确定。在该路径中采用的两个连续节点。例如,考虑一个高程网格:

1 1 1 1 1  
2 1 3 1 2                                                               
1 2 3 1 2                                                              

如果我采取这条道路:( X意味着继续,O意味着没有交叉):

X X X O O
O O X O O
O O X X X

此路径的值为2,因为最高的高程差异位于从1到3的部分。

问题是:找到允许从任何检查点到另一个检查点的D的最小值,这意味着D将是从一个检查点到另一个检查点的路径的最大长度。

例如,如果D为2,则意味着我可以通过使所有路径的最大值为2来从检查点到达另一个。

什么是有效的算法?

2 个答案:

答案 0 :(得分:1)

这与Dijkstra的算法非常相似。从节点开始,探索越来越远的所有节点。以set S作为任何节点开始,仅作为第一个节点,并使用distance infinity标记其余节点。考虑从S引出的未探测边缘,如果小于其标签,则标记具有高程差异的相邻未探测节点。将距离最小的所有相邻节点添加到S并重复。运行时间应该只是O(E)

答案 1 :(得分:0)

看起来你要求为这些网格之一提供全对最短路径解决方案。维基百科建议(http://en.m.wikipedia.org/wiki/Shortest_path_problem#All-pairs_shortest_paths)Floyd-Warshall(O(v ^ 3))或Johnson的算法(O(VE + V ^ 2 log V))将是一个不错的选择。由于边数小于4 * V,约翰逊的算法将渐近更快。