算法概要:
对于图G=(V,E)
X={1},Y=V-{1}
对于每个v
∈
\in
∈Y,如果存在从点1到v的边,则令
λ
\lambda
λ[v]为边的长度;否则令
λ
\lambda
λ[v]为
∞
\infin
∞,并设
λ
\lambda
λ[1]为0
while Y
≠
\neq
̸={}
令y
∈
\in
∈Y,使得
λ
\lambda
λ[y]最小
将y从Y移到X
更新那些在Y中与y相邻的顶点的标记
end while
伪代码:
输入:含权有向图G=(V,E),V={1,2,…n}
输出:G中顶点1到其他顶点的最短距离
X={1};Y
←
\leftarrow
←V - {1};
λ
\lambda
λ[1]
←
\leftarrow
← 0
for y
←
\leftarrow
← 2 to n
if y 相邻于1 then
λ
\lambda
λ[y]
←
\leftarrow
← length[1,y]
else
λ
\lambda
λ[y]
←
\leftarrow
←
∞
\infin
∞
end if
end for**
for j
←
\leftarrow
← 1 to n-1
令y
∈
\in
∈Y,使得
λ
\lambda
λ[y]最小
X
←
\leftarrow
← X
⋃
\bigcup
⋃{y}
Y
←
\leftarrow
← Y-{y}
for 每条边(y,w)
if w
∈
\in
∈ Y and
λ
\lambda
λ[y] +length[y,w] <
λ
\lambda
λ[w] then
λ
\lambda
λ[w]
←
\leftarrow
←
λ
\lambda
λ[y] +length[y,w]
end for
end for
Dijkstra算法——求最短路径
最新推荐文章于 2025-05-02 18:58:24 发布