【问题标题】:Graph Algorithm to Find Shortest Path Using Elevations使用高程查找最短路径的图算法
【发布时间】:2014-01-13 00:02:19
【问题描述】:

考虑一个网格(X x 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 来从检查点到达另一个检查点。

什么是有效的算法?

【问题讨论】:

  • 您的问题没有格式化,因此很难看到您提供的示例路径。一种解决方案是从最高处向下走,只走尽可能小的路线,看看是否能到达起始位置。

标签: algorithm graph-algorithm


【解决方案1】:

这很像 Dijkstra 的算法。从一个节点开始,探索越来越远的所有节点。从将S 设置为任何节点开始,仅是第一个节点,并将其余节点标记为距离无穷大。考虑引出S 的未探索边缘,如果高差小于它们的标签,则使用高差标记相邻的未探索节点。将所有最小距离的相邻节点添加到S 并重复。运行时间应该只是O(E)

【讨论】:

    【解决方案2】:

    您似乎要求对这些网格之一提供全对最短路径解决方案。维基百科建议 (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,Johnson 算法会渐近更快。

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多