单源最短路径问题之Dijkstra算法详解

单源最短路径问题之Dijkstra算法详解

单源最短路径:给定一个图 G=(V,E) ,找到从给定源结点 sV 到每个结点 vV 的最短路径。

Dijkstra算法

目标:是解决带权重的有向图的单源最短路径问题。
前提:假设对于所有的边 (u,v)E ,都有 w(u,v)0
该算法会在运行过程中维护一个结点集合 S

符号表示

V :所有结点的集合。
S :结点集合,确定最短路径结点的集合。
Q :最小优先队列。
s :源结点。
u :选择最短路径估计最小的结点。

算法伪代码

《单源最短路径问题之Dijkstra算法详解》

松弛技术

Dijkstra算法中需要使用松弛技术。对于每个结点 v ,维持一个属性 v.d ,用来记录从源结点 s 到结点 v 的最短路径权重的上界,称为最短路径估计。
初始化操作
《单源最短路径问题之Dijkstra算法详解》
松弛 relax(u,v,w)
《单源最短路径问题之Dijkstra算法详解》
将从结点 s 到结点 u 之间的最短路径距离加上结点 u 与结点 v 的权重,并与当前的 s v 的最短路径进行比较,如果前者更小,则更新 v.d v.π .

#最小优先队列

在该算法中,使用最小优先队列 Q 来保存结点集合,每个结点的关键值为其 d 值。
EXTRACTMIN(Q)
最小优先队列中的操作,去掉并返回 S 中具有最小键值的元素。在这里,就是返回并去除具有最小 d 值的结点。

    原文作者:Dijkstra算法
    原文地址: https://blog.csdn.net/nxiangbo/article/details/50437631
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞