Dijkstra算法和其邻接矩阵实现
Dijkstra算法:求定点到各顶点的最短路。
step 0:置 S<-{1}, T<-{2,3,4...n}, u1<-0,对一切j属于T, uj<-bij ;
记录 R=(J1 ,J2,... Jn),对一切 j=1,2,3,... ,n;Jj<-1
step 1 : 若T为空,转step3;否则在T中取一顶点k,使得 uk=min{ uj | j属于T }
置 S<-S U {k},T<-T-Jj{k}。
step 2: 对一切j属于T,修正uj如下:
若uj>uk+bkj,置uj<-uk+bkj,Jj<-k,返回step1。
step 3:根据记录R,找出点1到各点i的最短路。
示例:
(graphviz 画图)
邻接矩阵表示:
0 | 5 | 10 | int | int |
int | 0 | 3 | 9 | 2 |
int | 2 | 0 | 1 | int |
int | int | int | 0 | 4 |
7 | int | int | 6 | 0 |
更新为:
0 | 5 | 8 | 14 | 7 |
0 | 5 | 8 | 13 | 7 |
0 | 5 | 8 | 9 | 7 |
结果即如图红线所示。
算法步骤:
step 0: S'={A} T={B,C,D,E}
uA=0, uB=5, uC=10; uj=int,j=D,E
R={JA,JB,JC,JD,JE}={A,A,A,A,A}
step 1: min{uj | j属于T} =uB=5,
置S={A,B}, T=[C,D,E}
step 2: 修改uj,j属于T
uC=8, uD=14, uE=7
JC=JD=JE=B;
循环1,2步骤,更新uD=13, uD=9
R={A,A,B,C,B}