Bootstrap

100种算法【Python版】第22篇——Dijkstra算法

1 算法原理

Dijkstra算法由计算机科学家艾兹赫尔·迪科斯彻(Edsger W. Dijkstra)于1956年提出,并于1959年发表。迪科斯彻在荷兰阿姆斯特丹的数学中心开发了这一算法,以解决最短路径问题。算法的设计初衷是为了解决图论中的单源最短路径问题,尤其是边权重非负的图。

Dijkstra算法通过维护一个优先队列来动态更新从起点到各个顶点的最短路径。每次选取当前距离最短的未访问顶点进行扩展,直到所有顶点的最短路径被确定。

算法的完整流程
(1)初始化:

  • 设置起点到起点的距离为0,其他所有顶点的距离为无穷大。
  • 使用一个优先队列(最小堆)来存储顶点及其当前已知最短路径距离。
  • 创建一个集合用于记录已访问顶点。

(2)主循环:

  • 从优先队列中提取距离最小的顶点作为当前顶点。
  • 如果该顶点已被访问,跳过。
  • 将该顶点标记为已访问。
  • 对当前顶点的每个邻接顶点,计算从起点经当前顶点到达它的距离。
  • 如果这个距离小于邻接顶点的当前已知距离,则更新该顶点的距离,并在优先队列中更新或插入该顶点。

;