DisjKstra算法
class Solution {
public:
int networkDelayTime(vector<vector<int>>& times, int N, int K) {
//DisjKstra算法
vector<vector<long long>> dis(N+1, vector<long long>(N+1, INT_MAX));
vector<int> vis(N+1, 0);
int ans = 0;
for(int i=0; i<=N;i++)
dis[i][i] = 0;
for(int i=0; i<times.size(); i++)
dis[times[i][0]][times[i][1]] = times[i][2];
vis[K] = 1;
for(int i=1; i<N; i++){
int node = 0, minn = INT_MAX;
for(int j=1; j<=N; j++){
if(!vis[j] && dis[K][j] <= minn){
minn = dis[K][j];
node = j;
}
}
vis[node] = 1;
for(int j=1; j<=N; j++)
dis[K][j] = min(dis[K][j], dis[K][node] + dis[node][j]);
}
for(int i=1; i<=N; i++){
if(dis[K][i] == INT_MAX)
return -1;
ans = max(ans, (int)dis[K][i]);
}
return ans;
}
};
Floyd算法
class Solution {
public:
int networkDelayTime(vector<vector<int>>& times, int N, int K) {
//Floyd算法
vector<vector<long long>> dis(N+1, vector<long long>(N+1, INT_MAX));
int ans = 0;
for(int i=0; i<=N;i++)
dis[i][i] = 0;
for(int i=0; i<times.size(); i++)
dis[times[i][0]][times[i][1]] = times[i][2];
for(int k=1; k<=N; k++)
for(int i=1; i<=N; i++)
for(int j=1; j<=N; j++)
dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
for(int i=1; i<=N; i++){
if(dis[K][i] == INT_MAX)
return -1;
ans = max(ans, (int)dis[K][i]);
}
return ans;
}
};