图——单源最短路径

南笙酒味 提交于 2019-12-10 06:40:12

 过程中的数组结果

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

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!