文章目录
-
- 题目描述
- 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 K

最低0.47元/天 解锁文章
586

被折叠的 条评论
为什么被折叠?



