dijkstra算法详细步骤,迪杰斯特拉算法例题
背景
在高德、百度地图上旅行时,大家一定使用过路径规划的功能。 例如,从出发地a到目的地b,开车有两个方案。
时间最短,但路途遥远。 路程最短,时间长。 我想作为开发者,我曾经考虑过他用什么算法计算了最优方案。 今天我们来谈谈文摘算法。
什么是迪杰斯特拉算法
戴克斯特拉算法(Dijkstra )由荷兰计算机科学家戴克斯特拉于1959年提出,故又称戴克斯特拉算法。 是从一个顶点到剩下的各顶点的最短路径算法,解决权利图中的最短路径问题。 稀疏算法的主要特点是从起点开始采用贪婪算法策略,每次遍历到距离起点最近且从未访问过的顶点相邻节点,并扩展到终点。 -百度百科
算法流程
设0为出发地a,剩下的1、2、3、4为目的地b,则现在求出从0到各点的最短路径是多少。
S为已求出最短路径的节点,U为未求出最短路径的节点,Dist[]存放最短路径长度
发现1.0的计算方式最小值为4,对应节点1,更新从0到所有节点的最短路径Dist[]。 分别为0-0=0,0-1=4,0-2=6,0-9=3,0-4=(无限大)。
2 .在s集合中找到与u集合相关的连接:1-2=1,1-4=4,0-3=9,他的最小出度为1,更新dist。 0-2=6大于0-1-2=5,所以2的最短路径是5,1-4=4,所以4的当前最短路径
3 .在集合s { 0,1,2 }中找到与集合u { 3,4 }存在链路:2-4=2,2的最短路径是5,所以0-1-2-4=7小于0-1-4=8,所以4个节点的最短路径
4.4由于节点没有出度,所以没有变化
5 .集合s { 0,1,2,4,3 }和集合U{3}只有连接0-3=9,所以3的最短路径是9。 0-3-2=11大于2的原始最小路径值5,因此丢弃。 以下是最终的0到各节点的最短路径值。
最终结果
0-1最短距离40-2最短距离50-3最短距离90-4最短距离7