1.问题
用Dijkstra算法求解下图各个顶点的最短距离,给出距离矩阵。
2.解析
1.找出距离当前节点1最近的节点2(权值最小相邻边)
2.对于节点2的邻居,较之已有的路径,检查是否有前往他们更短路径,如果有,就更新其路径长度,此时节点1-节点3=6,但是经过节点1-节点3=5,小于6,更新路径);
3.更新完所有邻居节点的开销后,又回到第(1)步,即选择距离当前节点最近的节点,前往该节点并更新邻居的路径长度;循环这个过程,直到每个节点都走过;
4.计算最终路径。
3.核心代码
for(i=1; i<=n; i++) {
min = maxsize;
for(j=1; j<=n; j++)
if(!f[j]&&dis[j]<min) {
min=dis[j];
k=j;
}
f[k] = 1;
for(j=1; j<=n; j++)
if(a[k][j]!=0&&!f[j]&&dis[j]>dis[k]+a[k][j])
dis[j]=dis[k]+a[k][j];
}
分析
该算法的时间复杂度为O(n^2)