有 N 个网络节点,标记为 1 到 N。
给定一个列表 times,表示信号经过有向边的传递时间。 times[i] = (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点传递到目标节点的时间。
现在,我们向当前的节点 K 发送了一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1。
注意:
N 的范围在 [1, 100] 之间。
K 的范围在 [1, N] 之间。
times 的长度在 [1, 6000] 之间。
所有的边 times[i] = (u, v, w) 都有 1 <= u, v <= N 且 0 <= w <= 100。
1 class Solution {
2 public:
3 int networkDelayTime(vector<vector<int>>& times, int N, int K) {
4 vector<vector<int>>G(N,vector<int>(N,1000));
5 vector<int>dist(N,1000);
6 for(int i = 0;i<times.size();i++){
7 G[times[i][0]-1][times[i][1]-1] = times[i][2];
8 }
9 //////////////////////////////////////////////////////////////
10 for(int i = 0;i<N;i++){
11 dist[i] = G[K-1][i];
12 }
13 //////////////////////////////////////////////////////////////
14 vector<int>s(N,0);
15 s[K - 1] = 1;
16 dist[K - 1] = 0;
17 int num = 1;
18 int max = 0;
19 while(num < N){
20 int min = 1000;
21 int next = -1;
22 for(int i = 0;i<N;i++){
23 if(s[i] == 0&&dist[i] < min){
24 min = dist[i];
25 next = i;
26 }
27 }
28 if(min == 1000)
29 return -1;
30 s[next] = 1;
31 num++;
32 for(int i = 0;i<N;i++){
33 if(dist[i] > dist[next]+G[next][i]&&G[next][i] != 1000){
34 dist[i] = dist[next] +G[next][i];
35 }
36 }
37 }
38 for(int i = 0;i < N;i++){
39 if(max < dist[i])
40 max = dist[i];
41 }
42 return max;
43 }
44 };
来源:https://www.cnblogs.com/qinqin-me/p/12044461.html