class Solution {
public:
int networkDelayTime(vector<vector<int>>& times, int N, int K) {
int arr[N+1][N+1];
//初始化
for(int i = 1;i <= N;i++){
for(int j = 1;j <= N;j++){
if(i == j) arr[i][j] = 0;
else arr[i][j] = INT_MAX;
}
}
for(int i = 0;i < times.size();i++){
arr[times[i][0]][times[i][1]] = times[i][2];
}
vector<int> book(N+1,0);
int dis[N+1];
for(int i = 1;i <= N;i++){
dis[i] = arr[K][i];
}
for(int i = 1;i < N;i++){
int min = INT_MAX,flag = 0;
//找出距離K點最近的那個點
for(int j = 1;j <= N;j++){
if(dis[j] < min && book[j] != 1){
flag = j;
min = dis[j];
}
}
book[flag] = 1;
for(int j = 1;j <= N;j++){
if(arr[flag][j] != INT_MAX){
if(dis[flag] + arr[flag][j] < dis[j]){
dis[j] = dis[flag] + arr[flag][j];
}
}
}
}
int maxn = 0;
for(int i = 1;i <= N;i++){
maxn = max(maxn,dis[i]);
}
if(maxn == INT_MAX) return -1;
else return maxn;
}
};