单源最短路径问题之Dijkstra算法详解
单源最短路径:给定一个图 G=(V,E) ,找到从给定源结点 s∈V 到每个结点 v∈V 的最短路径。
Dijkstra算法
目标:是解决带权重的有向图的单源最短路径问题。
前提:假设对于所有的边
(u,v)∈E
,都有
w(u,v)≥0
。
该算法会在运行过程中维护一个结点集合
S
。
符号表示
S
:结点集合,确定最短路径结点的集合。
s
:源结点。
算法伪代码
松弛技术
Dijkstra算法中需要使用松弛技术。对于每个结点
v
,维持一个属性
- 初始化操作
- 松弛
relax(u,v,w)
将从结点
s
到结点
#最小优先队列
在该算法中,使用最小优先队列
Q
来保存结点集合,每个结点的关键值为其
-
EXTRACT−MIN(Q)
最小优先队列中的操作,去掉并返回
S
中具有最小键值的元素。在这里,就是返回并去除具有最小