一、题目
二、代码
class Solution {
public int networkDelayTime(int[][] times, int n, int k) {
final int INF = Integer.MAX_VALUE / 2;
// 邻接矩阵存储边信息
int[][] graph = new int[n][n];
for (int i = 0; i < n; ++i) {
Arrays.fill(graph[i], INF);
}
for (int[] t : times) {
// 边序号从 0 开始
int x = t[0] - 1, y = t[1] - 1;
graph[x][y] = t[2];
}
// 从源点到某点的距离数组
int[] dist = new int[n];
Arrays.fill(dist, INF);
// 由于从 k 开始,所以该点距离设为 0,也即源点
dist[k - 1] = 0;
// 节点是否被更新数组
boolean[] used = new boolean[n];
for (int i = 0; i < n; ++i) {
// 在还未确定最短路的点中,寻找距离最小的点
int min = -1;
for (int j = 0; j < n; ++j) {
if (!used[j] && (min == -1 || dist[j] < dist[min])) {
min = j;
}
}
// 用该点更新所有其他点的距离
used[min] = true;
for (int j = 0; j < n; ++j) {
dist[j] = Math.min(dist[j], dist[min] + graph[min][j]);
}
}
// 找到距离最远的点
int max = 0;
for(int element : dist){
max = Math.max(element, max);
}
return max == INF ? -1 : max;
}
}