单源最短路径问题是给定带权有向图
G=(V,E),其中每条边的权都是非负实数,且给定V中一个源点,计算从源点到其它各个顶点的最短路径长度(路上各边权之和)。
Dijkstra算法是解单源最短路径问题的贪心算法,且不能处理带负边权的情况,用邻接矩阵或邻接表存图。
下面我们讲解一下算法思路,我们找来一张带权有向图:
![7cb4dfa54e62b6e66b0c5a96fb14e901.png](https://img-blog.csdnimg.cn/img_convert/7cb4dfa54e62b6e66b0c5a96fb14e901.png)
问题重述:假设它的起点是 a ,要求它到各点的最短距离。
Dijkstra 算法思路是维护一个集合 s ,集合内的点是已经确定最短路的点,可以视为一个整体,每次操作找出与集合相邻的点中距离起点最近的点加入集合中,并确定它的最短路为它的上家的最短路+该边权值,存到dist中。
第一步,我们先把源点 a 加入集合,红色的点为集合中的点,s={a} ; dist[]={0,10,∞,30,100}。(∞指a无法直接到达另一点)