Dijkstra 算法的思想
Dijkstra 算法说白了就是一个求最短路径的算法,用于从一个指定的点到其余各个点的最短路径,所以也叫做“单源最短路径”
例如求0到4的最短路径
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLzZlbalXOHJmdOJDW2J1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5IDOxEDMzITMwMTNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
看似好复杂好复杂,其实我们完全可以逐个击破。
首先我们需要一个列表来存储该节点是否被访问了,对该列表进行初始化,全都为false。
然后我们还需要一个列表,用来记录从起点到“终”点的距离。(这里我们要将它看成无穷大)如图:
之后呢还需要最后一个列表,这个列表用来存储上一个节点,用-1来表示不存在这条边。如图
然后我们就可以开始了
从初始节点0开始,我们规定0节点到0节点的距离为0,然后寻找和它直接相连的两条边,并记录列表进行更新。like this
然后肯定就是进行比较,找到最短的边呗,显而易见就是1号节点,让后就以该节点为初始节点重复操作就行啦。那么这里要注意一个问题就是更新数据的时候,我们要比较的是当新节点的距离加上边的值如果比对应节点小时,则更新,反之则保持不变。
说了这么多,还不如来张动图说的明白
Dijkstra 算法的概述图我也放这啦,慢慢看吧
由于本人也是小萌新,Dijkstra算法也才刚刚学到,希望对大家有些许帮助,发文章纯兴趣,大佬轻喷
图片来源于百度百科和b站upWAY_zhongup视频中截取