Bellman-Ford模板
Bellman-Ford 算法流程分为三个阶段: (1) 初始化:将除源点外的所有顶点的最短距离估计值 d[v] ←+∞, d[s] ←0; (2) 迭代求解:反复对边集 E中的每条边进行松弛操作,使得顶点集V中的每个顶点v的最短距离估计值逐步逼近其最短距离;(运行|v|-1次) (3) 检验负权回路:判断边集 E 中的每一条边的两个端点是否收敛。如果存在未收敛的顶点,则算法返回 false ,表明问题无解;否则算法返回 true ,并且从源点可达的顶点 v 的最短距离保存在 d[v] 中。 算法描述如下: Bellman-Ford(G,w,s) : boolean // 图 G ,边集 函数 w , s 为源点 1 for each vertex v ∈ V(G) do //初始化 1阶段 2 d[v] ←+∞ 3 d[s] ←0; //1阶段结束 4 for i=1 to |v|-1 do //2阶段开始,双重循环。 5 for each edge(u,v) ∈E(G) do //边集数组要用到,穷举每条边。 6 If d[v]> d[u]+ w(u,v) then //松弛判断 7 d[v]=d[u]+w(u,v) //松弛操作 2阶段结束 8 for each edge(u,v) ∈E(G) do 9 If d[v]> d[u]+ w(u,v) then 10 Exit