单源最短路径问题
所讨论的算法都是在松弛技术的基础上进行的。
1、初始化(对最短路径估计和前驱结点进行初始化)伪代码
INITIAlIZE_SINGLE_SOURCE(G,s){
for each vertex v ε G.V
v.d=∞;
v.∏=NIL;
end
s.d=0;
}
其中v.d记录从源结点s到结点v的最短路径权重的上界,v.∏为v的前驱结点。
2、松弛操作(对边(u,v))伪代码
RELAX(u,v){
if v.d>u.d+ω(u,v)
v.d=u.d+ω(u,v);
v.∏=u;
end
}
所有算法之间的不同之处是对每条边进行松弛的次数和松弛边的次序有所不同。
下面分别介绍Bellman-Ford算法、有向无环图中的单源最短路径问题、
一、Bellman-Ford算法
1、解决的是一般情况下的单源最短路径问题。
2、算法返回一个布尔值,表明是否存在一个从源结点可以到达的权重为负值的环路。
3、算法代码
Bellman-Ford(G,ω,s){
INITIALIZE_SINGLE_SOURCE(G,s);
for i=1 to |G.V|-1
for each edge (u,v) ε G.E
RELAX(u,v);
end
end
for each edge (u,v) ε G.E
if v.d>u.d+ω(u,v);
return FALSE;
end
end
return TURE;
}
4、算法分析:总运行时间为 Ο(VE)
二、有向无环图中的单源最短路径问题