过程中的数组结果
1.数组d[维数=结点个数]:存放各个结点到源结点的距离,初始化为无穷大;
2.一维数组color[维数=结点个数]={WHITE,BLACK} :表示该结点是否被访问(非必须)
3.一维数组pred[维数=结点个数]:存放各个结点的父结点
4.优先队列Q
Dijkstra(G, w, s)
#输入 G:图 W:为图中边的权重,二维数组,用来存放边的权重 s:源结点
Input: A graph G, a matrix w representing the weights between vertices in G, source vertex s
Output: None
步骤1:构建一维数组d[V]:存放到原点的距离,初始化为无穷大,color[V]
for 𝑢 ∈ 𝑉 do
𝑑[𝑢] ← ∞, 𝑐𝑜𝑙𝑜𝑟[𝑢] ←WHITE;
end
步骤2:将源结点到源结点的距离置为0,并将父结点置为NULL
𝑑[𝑠] ← 0;
𝑝𝑟𝑒𝑑[𝑠] ← NULL;
步骤3:将所有结点,以及结点的距离 放到优先队列Q中
𝑄 ← queue with all vertices;
步骤4:循环遍历直到队列Q为空
While 𝑁𝑜𝑛-𝐸𝑚𝑝𝑡𝑦(𝑄) do // Process all vertices
步骤4.1 返回队列Q中距离最小的结点u
𝑢 ←Extract-Min(𝑄); // Find new vertex
步骤4.2 遍历u所有子结点,更新子结点的距离
for 𝑣 ∈ 𝐴𝑑𝑗[𝑢] do
if 𝑑 [𝑢] + 𝑤 [𝑢, 𝑣] < 𝑑[𝑣] then // If estimate improves
𝑑 [𝑣]← 𝑑 [𝑢] + 𝑤 [𝑢, 𝑣 ]; // relax
Decrease-Key(Q, 𝑣, 𝑑[𝑣]); #更新队列结点的距离
𝑝𝑟𝑒𝑑 [𝑣] ← 𝑢;
end
end
步骤4.3 子结点遍历完成后,将该结点颜色置为BLACK,
𝑐𝑜𝑙𝑜𝑟[𝑢] ← BLACK;
end
来源:CSDN
作者:来路与归途
链接:https://blog.csdn.net/qq_42233538/article/details/103445266