n
Dijkstra
n
基本思想
:
贪心
n
设置一个顶点集合
S
,从源点到
S
中顶点的最短路径权值已经确定,通过反复从
V-S
中选取具有最
短路径估计的顶点
u
,将
u
加入
S
中,并
更新
所有
u
的出边,求得最短路径
l
void dijkstra( ) {
初始化
S={
空集
}
d
ist
[s] = 0;
其余
d
ist
值为正无穷大
for (k = 1; k < n; ++k){
取出不在
S
中的最小的
d
ist
[i];
for (
所有不在
S
中且与
i
相邻的点
j)
if (d
ist
[j] > d
ist
[i] + cost[i][j])
d
ist
[j] = d
ist
[i] + cost[i][j];
S = S + {i};
}
}
n
时间复杂度为
O(V^2)
n
堆优化时间复杂度为
O(Elog(v))