算法导论 25.2 Floyed-Warshall算法

一,Floyed-Warshall算法的思想

        Floyed-Warshall算法(以下简称FW)用一种不同的动态规划公式来解决所有结点对的最短路径问题,有向图的权值可以为负,但不能存在负值环路。与25.1中的方法不同的是,25.1中是通过每次拓展一条边,而FW算法则是用已知最短路径的(i,k)和(k,j)的值来算出(i,j)的最短路径。

二,FW算法的递归定义

        若k=0,dij(k)=wij;若k>=1,dij(k)=min(dij(k-1),dik(k-1)+dkj(k-1));也就是说,D(0)=W,第k个最短路径权重矩阵D(k)的每个元素应该是D(k-1)对应元素的值与D(k-1)中i到k的最短路径加上k到j的最短路径中的最小值。

三,FW算法的伪代码

FLOYD-WARSHALL(W)

1. n=W.rows

2. D(0)=W

3. for k=1 to n

4.     letD(k)=(dij(k))be a new n*n matrix

5.     for i=1 to n

6.         for j=1 to n

7.             dij(k)=min(dij(k-1),dik(k-1)+dkj(k-1))

8. return D(n)

第1-2行中,令n等于初始矩阵W的行数,并构建了一个最短路径权重矩阵D,让它初始为W;第3-7行中,有三个循环,k循环从1到n,表示对D(1)到D(n)共n个矩阵的遍历,内层的两个循

你可能感兴趣的:(算法导论,算法导论,数据结构)