我有一个使用正确实现的dijkstra算法计算的最短路径。它通过B,C,D和E从A到F.所以整个最短路径是[A,B,C,D,E,F]。
现在我想从G到F.当从队列中弹出C时,我意识到它是到F的最短路径的一部分。这是否意味着我也知道从G到F的最短路径是[G ,H,C,D,E,F]?
答案 0 :(得分:1)
没有。但它确实意味着从 C 到 F 的最短路径是[C,D,E,F]。
如果有一条较短的路径P
,那么我们构建一条从A到F [A,B,[P]]的新路径,它本身比我们原路径短。这是一个矛盾,因为我们假设[A,B,C,D,E,F]是从A到F的最短路径。
这可以推广以证明最短路径的子路径也是最短路径。在你的情况下,这意味着如果从G到F的最短路径包含C,那么该最短路径包含[C,D,E,F]作为子路径。由于你不知道C是否在你的最短路径中,如果你存储从C到F的最短路径的权重,这个定理只会帮助你减少计算次数。
答案 1 :(得分:0)
我想不是,因为你必须考虑从H到C的距离。 如果距离[H,C]很大,让我们说大于距离[H,I,F]怎么办?