>来自:szHans, 时间:2001-12-19 22:03:00, ID:798977
>这是图论中的最短路径问题拓展,有经典的解决办法。
>能说来听听么?
我把算法课的笔记(咱们复印的老师的)打了上来,
不知道这个对你们有没有用,下个星期就要算法考试了,
我什么都没有看懂,5555555555555
好心的叔叔阿姨姐姐妹妹哥哥弟弟们,求你们也帮忙帮忙看一下http://www.delphibbs.com/delphibbs/dispq.asp?LID=797586
是个排序的算法题.......
求图的所有顶点对之间的最短路径
1.思想
V={V1,V2,...Vn}, Floyd算法用一个n*n的矩阵A来计算最短路径的长度
开始时, /C[i,j] i!=j且Vi列到Vj有弧
A[i,j]= 无穷 i!=j且Vi列到Vj无弧
/0 i=j
对A做n次循环, A1[i.j]=min{A[i,j],A[i,1]+A[1+j]}
Ak[i.j]=min{A(k-1)[i,j],A(k-1)[i,k]+A(k-1)[k+j]}
k=1,2,3,........n.
最后An[i,j]是Vi到Vj的最短路径的长。
2.正确性证明(小弟打字速度慢,所以免了,可惜考试要考:()
3.算法
begin
/ 对A置初值; {O(n的平方)}
| 对路径矩阵P置初值;{无边相连,置无穷大,其余置0} O
| for k:=1 to ndo
| for i:=1 to ndo
O(n的| for j:=1 to ndo
三次| if A[i,k]+A[k,j]+A[k,j]
方) | then
begin
| A[i,j]:=A[i,k]+A[k,j];
| P[i,j]:=k
| end
/ end
4.例子:(下面是个有向图,方向是1->2,有9的那条弧;2->1,中间的弧
1->3左下的那条弧,3->2,右下的弧)
9
___________________
| 4 |
(1)----------------(2)
| |
-------(3)---------
5 3
0 9 5
所以 A0= 4 0 无穷 (注:以下都是矩阵,打不出长大括号)
无穷 3 0
0 0 0
P0= 0 0 无穷
无穷 0 0
0 9 5 0 0 0
A1= 4 0 9 P1= 0 0 1
无穷 3 0 无穷 0 0
0 9 5 0 0 0
A2= 4 0 9 P2= 0 0 1
7 3 0 2 0 0
0 8 5 0 3 0
A3= 4 0 9 P3= 0 0 1
7 3 0 2 0 0