最短路径算法dijkstra
该算法的核心就是从当前节点的邻居节点中找到距离起始节点的最近那个节点,作为下步迭代的节点。
一 算法步骤
- 给定起始节点s(v0)、邻接矩阵A;
- 初始化n维零标记向量label,n维inf距离向量distance;
-
s(v0)开始,更新label[0]=1,distance[0]=1;
- 遍历搜索,更新label、distance,记当前搜索节点vi,如果label[j]!=1且A[i,j]+distance[i]<distince[j],更新distince[j]=A[i,j]+distance[i],j为min(A[i,j]+distance[i])时的下次搜索节点,更新label[j]=1。
二 例子
- 邻接矩阵A
|
v0 |
v1 |
v2 |
v3 |
v4 |
v5 |
v0 |
0 |
1 |
12 |
inf |
inf |
inf |
v1 |
inf |
0 |
9 |
3 |
inf |
inf |
v2 |
inf |
inf |
0 |
inf |
5 |
inf |
v3 |
inf |
inf |
4 |
0 |
13 |
15 |
v4 |
inf |
inf |
inf |
inf |
0 |
4 |
v5 |
inf |
inf |
inf |
inf |
inf |
0 |
- 示例图
- 过程
3.1 v0,A;
3.2 标记向量label=[0,0,0,0,0,0]、
距离向量distance=[inf,inf,inf,inf,inf,inf];
3.3 v0开始,所以更新
label=[1,0,0,0,0,0],
distance=[0,inf,inf,inf,inf,inf];
3.4 更新label、distance
因为label[1]!=1且A[0,1]+distance[0]<distince[1],所以更新distince[1]=1,
因为label[1]!=1且A[0,2]+distance[0]<distince[2],所以更新distince[2]=12,
1为min(A[i,j]+distance[i])时的下次搜索节点v1,
此时
label=[1,1,0,0,0,0]
distance=[0,1,12,inf,inf,inf]
最终得到distance=[0,1,8,4,13,17]。