publicGraph(int n, int[][] edges) { g = newint[n][n]; // 邻接矩阵(初始化为无穷大,表示 i 到 j 没有边) for (inti=0; i < n; ++i) Arrays.fill(g[i], INF); for (var e : edges) g[e[0]][e[1]] = e[2]; // 添加一条边(输入保证没有重边) }
publicGraph(int n, int[][] edges) { d = newint[n][n]; // 邻接矩阵(初始化为无穷大,表示 i 到 j 没有边) for (inti=0; i < n; ++i) { Arrays.fill(d[i], INF); d[i][i] = 0; } for (var e : edges) d[e[0]][e[1]] = e[2]; // 添加一条边(输入保证没有重边和自环) for (intk=0; k < n; ++k) for (inti=0; i < n; ++i) for (intj=0; j < n; ++j) d[i][j] = Math.min(d[i][j], d[i][k] + d[k][j]); }
publicvoidaddEdge(int[] e) { intx= e[0], y = e[1], w = e[2], n = d.length; if (w >= d[x][y]) // 无需更新 return; for (inti=0; i < n; ++i) for (intj=0; j < n; ++j) d[i][j] = Math.min(d[i][j], d[i][x] + w + d[y][j]); }
publicintshortestPath(int start, int end) { intans= d[start][end]; return ans < INF / 3 ? ans : -1; } }