Dijkstra算法是一种解决单源最短路径问题的算法,即给定一个带权重的有向图和一个源节点,求出该节点到其他所有节点的最短路径。¹²
Dijkstra算法的基本思想是:从源节点开始,每次选择距离源节点最近(权重最小)的一个未访问过的节点,并用该节点更新其他未访问过的节点的距离,直到所有节点都被访问过或者无法再更新。¹²³
Dijkstra算法可以用以下步骤描述:
- 创建一个一维数组dist,用来存储源节点到其他所有节点的距离(初始值为无穷大),并将dist[源节点]设为0。
- 创建一个集合visited,用来存储已经访问过的节点(初始为空)。
- 重复以下操作,直到visited包含所有节点或者dist中没有可更新的值:
- 从dist中选择一个未访问过且距离最小的节点u,并将其加入visited。
- 遍历u的所有邻接点v,如果dist[u] + 权重(u,v) < dist[v],则更新dist[v] = dist[u] + 权重(u,v)。
经典例题详见acwing算法基础课Dijkstra算法一章
Source: (1) [最短路径问题]—Dijkstra 算法最详解 - 知乎. https://zhuanlan.zhihu.com/p/129373740 .
(2) Dijkstra算法图文详解_black-hole6的博客-CSDN博客. https://blog.csdn.net/lbperfect123/article/details/84281300 .
(3) 轻松搞懂dijkstra算法+堆优化 || 原理+实战 - 知乎. https://zhuanlan.zhihu.com/p/34624812 .
(4) Dijkstra算法详解 通俗易懂 - 知乎. https://zhuanlan.zhihu.com/p/338414118 .
(5) 图文详解 Dijkstra 最短路径算法. https://www.freecodecamp.org/chinese/news/dijkstras-shortest-path-algorithm-visual-introduction/ .