Dijkstra算法笔记---最短路

来源:互联网 发布:淘宝第三方介入 编辑:程序博客网 时间:2024/06/05 20:59

算法前提:

每条路径的距离无负值。


问题定义:

intput:

一个图G=(V,E),V表示点,E表示边;

起始点s;

点之间的距离(可连通);

output:

起始点s到其他每点的最短路程;


算法思想:

(初始化)d[s]<-0;//d[x]表示起始点s到x点(x∈V)的最短距离;s到s距离为0for each v∈Vdo d[v]<-∞//将s到其他点的距离赋为无穷大S<-∅//S是所有一直最短路径的顶点的集合,此时为空Q<-V//Q为其他点:V-S(主体)while Q≠∅do u<-Extract Min(Q)//从Q中取出d[x]最短的点为u,此时Q中已没有u这个点S<-S∪{u}//把u加入Sfor each v∈adj{u}//观察每个和u相连的点vdo if d[v]>d[u]+w(u,v)//如果已保存的(s到v的距离)>(s到u的距离)+(u到v的距离)then d[v]<-d[u]+w(u,v)//更新d[v]


图例: