总括
在接下来的几篇我们将要考察各种最短路径问题。
输入时一个赋值有权图:每条边(vi, vj) 相联系的是穿越弧的代价(或者称为值)。
一条路径的v1, v2, v3…………vn 的值就是 ∑(vi)( 1<=i <= n), 叫做赋权路径长。
而无权路径长只是路径上的边数, 即N - 1。(也就是搜索中的步数问题)
·
·
·
单源最短路径问题
给定一个赋权图 G = (V, E)和一个特定的顶点S最为输入, 找出从S到G中每一个其他顶点的最短赋权路径。
例如, 在上图中, 从v1 到 v2 的最短赋权路径的值为6, 它是从v1 到v4 到v7 再到v6 的路径。在这两个顶点间的最短无权路径长为2.
一般来说当不指明我们讨论的是赋权路还是无权路时, 如果图是赋权的, 那么路就是赋权的。还要注意在上一图的途径中从v6 到v1没有直接的路径。
前面的例子中的图没有负值的边。 现在我们假设将从v2 到v5 的边的长度改为 -10. 从v5 到v4 的最短路径的值为1, 但是, 通过下面的环的存在一条最短路, 他的长度是-5.
这条路显然仍不是最短的, 应为我们可以在这条路中滞留任意长。 因此, 在两个顶点间的最短路径问题是不确定的。
这个循环叫做负值图; 当他出现在图中的时候, 最短路径问题就是不确定的。
有负值未必是环伺, 但是他的出现似乎使问题的难度增加了。为了方便起见, 在没有负值圈时, 从s 到s 的最短路径为0;
·
·
·
解法分类
1.我们将考察如何求解该问题的四种形态的算法。 首先, 我们要考虑无权图最短路径问题并指出如何以O(V + E)的时间复杂度去解决它。
2.其次我们还将学习:如果假设没有负边, 那么如何求解赋权最短路的问题这个算法在使用合理的数据结构的情况先时间复杂度为0(E logV)。
3.如果图有负边, 我们将提供一种检点的解法, 但是时间复杂度为(E * V);
4.我们还将以线性的时间解决无圈图的特殊情形下的赋权为题
5.最后我们将给出基础图论模板通式, 供比赛参考。