您的位置:首页 > 编程语言 > Go语言

Dijkstra算法笔记---最短路

2013-10-28 17:07 218 查看
算法前提:

每条路径的距离无负值。

问题定义:

intput:

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

起始点s;

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

output:

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

算法思想:

(初始化)
d[s]<-0;					//d[x]表示起始点s到x点(x∈V)的最短距离;s到s距离为0
for each v∈V
do 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加入S
for each v∈adj{u}			//观察每个和u相连的点v
do if d[v]>d[u]+w(u,v)		//如果已保存的(s到v的距离)>(s到u的距离)+(u到v的距离)
then d[v]<-d[u]+w(u,v)	//更新d[v]


图例:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息