所谓单源最短路径(Single-Source-Shortest-Path)问题,就是求解从某个节点出发,到其他节点的最短距离。
求解该问题的常用算法有Bellman-Ford和Dijkstra,前者适用于一般情况如负权值边,后者适用于非负权值边。
参考《算法导论》第24章-单源最短路径的方法:
1.设置数组d存储每个节点到源节点的距离,维护一个提取最小d值的优先队列Q,Q初始化时是G的所有节点的集合
2.每次while循环取出Q中d最小节点u,添加到节点集合S,遍历当前节点u的邻居节点v,用所谓的松弛技术(Relax)更新邻居节点v的d取值(会影响下一个Q出列的节点)
3.直到Q队列为空,结束
伪代码:
Dijkstra(G, s)
S = [ ]
Q = [G]
while Q:
u = extract_min_queue(Q)
S.append(u)
for each v in Adjacent[u]:
Relax(G, d, u, v)
return d
Relax(d, u, v)
if d[v] > d[u] + G[