743. 网络延迟时间(dijkstral算法)

743. 网络延迟时间

有 n 个网络节点,标记为 1 到 n

给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。

现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1 。

 

示例 1:

输入:times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2
输出:2

示例 2:

输入:times = [[1,2,1]], n = 2, k = 1
输出:1

示例 3:

输入:times = [[1,2,1]], n = 2, k = 2
输出:-1

 

提示:

  • 1 <= k <= n <= 100
  • 1 <= times.length <= 6000
  • times[i].length == 3
  • 1 <= ui, vi <= n
  • ui != vi
  • 0 <= wi <= 100
  • 所有 (ui, vi) 对都 互不相同(即,不含重复边)
 1 class Solution {
 2 public:
 3     vector<int> dijkstral(const vector<vector<int>> &graph, int start) {
 4         int n = graph.size();
 5         vector<int> dis(n, INF); // 初始化起点到各节点最短距离为无穷大
 6         vector<bool> visited(n, false); // 初始化所有节点未被选过
 7         dis[start] = 0; // 初始起点到起点距离为0
 8         for (int i = 0; i < n - 1; i++) {
 9             int minNode = -1;
10             // 选定一个节点:
11             // 1)未被选过;
12             // 2)距离最短;
13             for (int j = 0; j < n; j++) {
14                 if (!visited[j] && ((minNode == -1) || (dis[j] < dis[minNode]))) {
15                     minNode = j;
16                 }
17             }
18             // 对于已选择的节点作为中转站,刷新经过中转站到各节点的最短路径
19             for (int j = 0; j < n; j++) {
20                 dis[j] = std::min(dis[j], dis[minNode] + graph[minNode][j]);
21             }
22             visited[minNode] = true;
23         }
24         return dis;
25     }
26     static constexpr int INF = 0x3F3F3F3F;
27     int networkDelayTime(vector<vector<int>>& times, int n, int k) {
28         vector<vector<int>> graph(n, vector<int>(n, INF));
29         for (auto &vec : times) {            
30             graph[vec[0] - 1][vec[1] - 1] = vec[2];
31         }
32         vector<int> ans;
33         ans = dijkstral(graph, k - 1);
34         sort(ans.begin(), ans.end());
35         int size = ans.size();
36         return (ans[size - 1] == INF) ? -1 : ans[size - 1];
37     }
38 };
posted @ 2022-05-03 01:33  跳动的休止符  阅读(187)  评论(0)    收藏  举报