一、什么叫单源最短路径
一个有向图G=(V,E),从源点S到某点的所有路径中,权值和最小的为最短路径。S到图中所有点的最短路径形成最短路径树。(注意理解最短路径和最短路径树的不同, 最短路径是最短路径树的子集)。
二、初始化操作
INITIALIZE-SINGLE-SOURCE(G, s)
for each vertex v∈V[G]
do d[v] = ∞
π[v] = NIL
d[s]=0
初始化最短路径估计d[v](无穷大)和前趋。
二、松驰操作
说的直白点,松驰操作就是更新源点到v的估计权值。看了下面的伪代码就明白了:
RELAX(u, v, w)
if d[v]>d[u]+w(u,v)
then d[v] = d[u]+w(u,v)
π[v] = u
这里更新了两个东西:一个v更小的估计权值以及v的前趋。(所有不要被《算法导论》上一长串的松驰操作的论述唬住)。
三、Bellman-Ford算法
先来看伪代码,以代码为切入点:
BELLMAN-FORD(G, w, s)
INITIALIZE-SINGLE-SOURCE(G, s)
for i←1 to |V[G]|-1
do for each edge (u,v)∈E[G]
do RELAX(u,v,w)
for each edge(u,v) ∈