Dijkstra 单调路径
Dijkstra Monotonic Path
我有一个关于使用 Dijkstra 检查最短路径是否严格单调的问题。
连接到每个节点的边被排序并存储在 LinkedList<Edge> edges;
shortestPathMap
是一个实用程序,用于存储从起始节点到结束节点的整个路径。
谢谢!
找到严格单调的最短路径可以通过根据权重按顺序松弛边来完成。
假设我们要找到最短的上升路径。我们将按升序排列边,然后按该顺序放松它们。 “放松”只是意味着将边的端点处的节点的权重更新为边的权重加上其起点节点的权重,如果该总和小于当前值。这与在 Dijkstra 中放宽边相同。这将始终产生最短的上升路径(如果我们同时更新所有等值边的节点权重,它可以严格上升)。
我们也可以通过对边进行降序排列来找到最短的下降路径。这两条路径之一将是最短的单调路径。
我认为使用这种遍历已排序边的方法(在 n logn 时间内)比尝试像上述方法那样遍历节点会更幸运——如果您只需要通过以下方法解决问题更新您向我们展示的方法,这将成为一个更难的问题。
我有一个关于使用 Dijkstra 检查最短路径是否严格单调的问题。
连接到每个节点的边被排序并存储在 LinkedList<Edge> edges;
shortestPathMap
是一个实用程序,用于存储从起始节点到结束节点的整个路径。
谢谢!
找到严格单调的最短路径可以通过根据权重按顺序松弛边来完成。
假设我们要找到最短的上升路径。我们将按升序排列边,然后按该顺序放松它们。 “放松”只是意味着将边的端点处的节点的权重更新为边的权重加上其起点节点的权重,如果该总和小于当前值。这与在 Dijkstra 中放宽边相同。这将始终产生最短的上升路径(如果我们同时更新所有等值边的节点权重,它可以严格上升)。
我们也可以通过对边进行降序排列来找到最短的下降路径。这两条路径之一将是最短的单调路径。
我认为使用这种遍历已排序边的方法(在 n logn 时间内)比尝试像上述方法那样遍历节点会更幸运——如果您只需要通过以下方法解决问题更新您向我们展示的方法,这将成为一个更难的问题。