文章目录
-
- 题目描述
- References
题目描述
有 N
个网络节点,标记为 1
到 N
。
给定一个列表 times
,其中 times[i] = (u, v, w)
表示有一条从节点 u
到节点 v
的时延为 w
的有向边。
现在,我们从某个节点 K
发送一个信号。需要多少时间才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1
。
示例:
输入: times = [[2,1,1],[2,3,1],[3,4,1]], N = 4, K = 2
输出: 2
可以使用 Dijkstra 算法来解决这个问题。算法的步骤如下:
- 构建邻接表:将输入的
times
转换成图的邻接表表示。 Ref. 【CS.DS】数据结构 —— 图:深入了解三种表示方法之邻接表(Adjacency List) - 初始化数据结构:距离数组
dist[]
,所有节点的距离初始化为无穷大,起点的距离设为 0;优先级队列pq
存储每个节点及其当前已知的最短距离。 - 执行 Dijkstra 算法:使用优先级队列选择当前距离起点最近的节点,更新其邻接节点的距离,并将更新后的节点加入队列。
- 计算结果:在所有节点都收到信号时,返回最大的距离;如果有节点未收到信号,返回
-1
。
#include <vector>
#include <unordered_map>
#include <queue>
#include <climits>
using namespace std;
int networkDelayTime(vector<vector<int>>& times, int N, int