考虑网格(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来从检查点到达另一个。
什么是有效的算法?
答案 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,约翰逊的算法将渐近更快。