次短路

问题:对于一个带权图,求两个顶点之间的次短路。

概念:次短路表示除最短路以外长度最小的路径

类别一:可以重复经过一个点。

解法:这个类别解法和求最短路相似,在进行 dijkstra 的过程中记录两个数组:dist0 和 dist1,分别表示最短路和次短路的答案。每次更新时需要依次判断是否可以更新次短路和最短路的值。由于需要计算次短路,所以调整后的 dijkstra 算法需要至少循环 2n-1 次才可以获得最终答案。

证明:如果我们要求解起点s到终点t的次短路,其中t周围有相邻节点u(u不止一个),那么有两种可能的情况:(1)起点s到顶点u的最短路+d(u,t),即u不在t的最短路径上。(2)起点到顶点u的次短路+d(u,t),即u在t的最短路径上。

类别二:不能重复经过一个点。

解法暴力,枚举两个顶点之间最短路上的每条边,每次在去掉这条边的剩下的图中计算最短路,取其中最小的一个答案就是最终次短路的答案。

你可能感兴趣的:(次短路)