标签:style blog color strong for 问题
Bellman-Ford算法
Dijkstra算法无法判断含负权边的图的最短路。
如果遇到负权,在没有负权回路存在时,即便有负权的边,也可以采用Bellman-Ford算法正确求出最短路径。
PS:负权回路的含义是,回路的权值和为负。
算法描述
1.初始化:将除源点外的所有顶点的最短距离估计值 d[v] ←+∞, d[s] ←0;
2.迭代求解:反复对边集E中的每条边进行松弛操作,使得顶点集V中的每个顶点v的最短距离估计值逐步逼近其最短距离;(运行|v|-1次)
3.检验负权回路:判断边集E中的每一条边的两个端点是否收敛。如果存在未收敛的顶点,则算法返回false,表明问题无解;否则算法返回true,并且从源点可达的顶点v的最短距离保存在 d[v]中。
伪代码:
1 For i=1 to |G.V|-1 2 For each edge(u,v)属于G.E 3 RELAX(u,v,w) 4 For each edge(u,v)属于G.E 5 If (v.d>u.d+w(u,v) 6 Return FALSE; 7 Return TRUE;
时间复杂度:O(VE) 即顶点数*边数
最短路径算法之三——Bellman-Ford算法,布布扣,bubuko.com
标签:style blog color strong for 问题
原文地址:http://www.cnblogs.com/Enumz/p/3862678.html