前言:
在前面的单源算法中,假定采用图的邻接表表示法。于此不同,本章中的大多数算法均采用邻接矩阵表示法。为方便起见,假设顶点编号为1,2,3,4,....|V|。于是我们用一个n*n的矩阵W,表示有n个顶点的有向图G=(V,E)中边的权值。其中
0
如果i = j
Wij = 有向边(i,j)的权值 如果i != j ,且(i,j)属于E
正 无穷如果i != j,且(i,j) 不属于E
前两个算法是用动态规划方法来分析的,利用到矩阵的性质。
在讨论之前,有必要对邻接矩阵表示法建立一些约定。首先,一般假设输入图G=(V,E)有n个顶点,所以n = |V|。其次,我们按常规用大写字母来表示矩阵,例如W,L,用带有下标的小写字母来表示矩阵的元素,如Wij。有些矩阵带有括号的上标
,用来表示迭代,rows[A] = n 。
![](https://img-my.csdn.net/uploads/201211/21/1353510953_9309.png)
25.1、最短路径与矩阵乘法(该算法使用动态规划分析)
1、最短路径子结构:对于图G=(V,E),用一个n*n的矩阵W,表示有n个顶点的有向图G=(V,E)中边的权值。考察顶点i到j的一条最短路径p,假设p之多包含m条边。假设图中不存在负权回路,则m是有限值。如果i = j,则路径p权值为0,且没有边。若顶点i和顶点j是不同顶点,则把路径p分解为i---->k->j,其中i---->k是路径p‘,其中p’至多有m-1条边。由引理24.1可知 min(i,j) = min(i,k) + wij
2、每对顶点间最短路径问题的一个递归解
现在设
为是从顶点i到j的至多m条边的任何路径的权值最小值。其中
![](https://img-my.csdn.net/uploads/201211/21/1353503560_9901.png)
公式(25.2) 递归解:
![](https://img-my.csdn.net/uploads/201211/21/1353503973_8056.png)
结论:不难得出
,当m >= n-1时,即从顶点i到j的至多有n-1条边的最小权重路径,就是顶i到j的最短路径。
![](https://img-my.csdn.net/uploads/201211/21/1353503560_9901.png)
![](https://img-my.csdn.net/uploads/201211/21/1353504440_3587.jpg)
3、算法描述(到这一步我想大家应该都很清楚了)
#定义25.2公式计算函数,L为