LeetCode 743. 网络延迟时间(图/Dijkstra算法/堆优化)


题目描述

在这里插入图片描述

在这里插入图片描述

Dijkstra算法简介

Dijkstra 算法,是由荷兰计算机科学家 Edsger Wybe Dijkstra 在1956年发现的算法,戴克斯特拉算法使用类似广度优先搜索的方法解决赋权图的单源最短路径问题。该算法的主要思想是贪心

将所有节点分成两类:已确定从起点到当前点的最短路长度的节点,以及未确定从起点到当前点的最短路长度的节点(下面简称「未确定节点」和「已确定节点」)。

每次从「未确定节点」中取一个与起点距离最短的点,将它归类为「已确定节点」,并用它「更新」从起点到其他所有「未确定节点」的距离。直到所有点都被归类为「已确定节点」。

用节点 A「更新」节点 B 的意思是,用起点到节点 A 的最短路长度加上从节点 A 到节点 B 的边的长度,去比较起点到节点 B 的最短路长度,如果前者小于后者,就用前者更新后者。这种操作也被叫做「松弛」。

设一个赋权有向图 G = ( V , E , W ) G=(V,E,W) G=(V,E,W)。其中的每条边 e i , j = { v i , w j } e_{i,j}=\{v_i,w_j\} ei,j={ vi,wj}的权值为一个非负的实数 w i , j ( e i , j ) w_{i,j}(e_{i,j}) wi,j(ei,j)该权值表示从顶点 v i v_{i} vi到顶点 v j v_{j} vj的距离。并设一单源点 s ∈ V s \in V sV。现在的任务是:找出从源点 s s s出发,到 V ∖ { s } V\setminus \left \{ s \right \} V{ s}中所有的节点的最短路径。(最短路径可以理解为所有可能的路径中总权和最小的那一条路径

定义一个集合 S S S ,如果集合 V ∖ { s } V\setminus \left \{ s \right \} V{ s} 中的某个顶点 v i v_{i} vi 在集合 S S S 中了,那么就说明从源点 s s s 到顶点 v i ∈ V ∖ { s } v_{i} \in V\setminus \left \{ s \right \} viV{ s} 的最短路径已经被找到,而在算法一开始的时候,集合 S S S 中只有源点 s s s。即:
S = { v i ∈ V : t h e    s h o r t e s t    p a t h    o f    v e r t e x    v i    h a s    b e e n    f o u n d } S= \left \{ v_i \in V: the\;shortest\;path\;of\;vertex\;v_i\;has\;been\;found \right \} S={ viV:theshortestpathof

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xylitolz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值