图论part09dijkstra算法
dijkstra算法:有向图的最短路径及到达问题
该算法可以同时求到所有节点的最短路径
权值不能为负数
类似于pirm算法(针对无向图),dijkstra算法三部曲:
- 选源点到哪个未被访问的节点近(prime:哪个未被访问的节点到生成树的距离最近)
- 标记最近的点(将距离树最近的节点加入树)
- 更新非访问节点到源点的距离(更新minDist数组)
还是要初始化minDist数组用来存距离源点(起点)的最小距离,且初始化int最大值
这里要清楚和最小生成树就不同了,最小生成树里面含有多个节点,一个非树节点可能和树里面的多个节点都相连,mindist存的是距离最近的那一个,比如树里有五个节点,节点6(非树)与树中的节点4、5都相连,距离分别是3和6,mindist取3;而dijkstra算法是存每个未访问节点到起点的最短距离,在mindist里面从起点开始数值应该由近到远累加的,所以说该算法可以求起点到所有节点的距离
Dijkstra堆优化
就是利用小顶堆将第一步优化,在使用邻接表使遍历更高效
小顶堆