
보다시피 문제 이름이 플로이드이기 때문에 플로이드와샬 알고리즘을 사용하여 풀이하는 문제이다.
주의해야할 점이 몇가지 있었다.
package BOJ;
import java.io.*;
import java.util.*;
public class sol11404 {
static int n, m;
static int[][] map;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
m = Integer.parseInt(br.readLine());
map = new int[n + 1][n + 1];
for (int i = 0; i < m; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
int cost = Integer.parseInt(st.nextToken());
if (map[start][end] != 0) {
map[start][end] = Math.min(map[start][end], cost);
} else {
map[start][end] = cost;
}
}
floyd();
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
}
public static void floyd() {
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (map[i][k] == 0 || map[k][j] == 0 || i == j) {
continue;
}
if (map[i][j] == 0) {
map[i][j] = map[i][k] + map[k][j];
} else {
map[i][j] = Math.min(map[i][k] + map[k][j], map[i][j]);
}
}
}
}
}
}