题意:给出一个电路,有向图,从一个源出发到遍历全部点所需要的时间。
分析与思路:这道题的关键是要从题意中弄懂实际上是要我们求到所有的点的最短耗时中的最长时间。所以我用dijkstra算法求出源到所有点的最短时间,然后找出最大的值返回即可。
代码:
vector<int> dst;
class Solution {
public:
struct cmp {
bool operator() (const int a, const int b) {
return dst[a]>dst[b];
}
};
int networkDelayTime(vector<vector<int>>& times, int N, int K) {
vector<vector<int>> G(N + 1, vector<int>(N + 1, -1));
for (int i = 0; i < times.size(); i++) {
G[times[i][0]][times[i][1]] = times[i][2];
}
dst=vector<int>(N + 1, 9999);
vector<bool> isvisited(N + 1, false);
vector<int> pre(N + 1, -1);
priority_queue<int,vector<int>,cmp> q;
q.push(K);
dst[K] = 0;
int count = 0;
while (!q.empty()) {
int temp = q.top();
q.pop();
count++;
isvisited[temp] = true;
for (int i = 1; i < N + 1; i++) {
if (G[temp][i] != -1 && G[temp][i] +dst[temp]< dst[i]) {
dst[i] = G[temp][i]+dst[temp];
pre[i] = temp;
if(!isvisited[i])
q.push(i);
}
}
}
if (count < N) return -1;
int sum = dst[1];
for (int i = 1; i < N + 1; i++) {
if (dst[i] > sum)sum = dst[i];
}
return sum;
}
};