☁️정리/❄️알고리즘
[Algorithm] 플로이드-워셜
뿌야._.
2023. 10. 19. 16:47
❓ 플로이드-워셜이란?
음수 사이클이 없는 그래프에서 모든 노드 간에 최단 거리를 구하는 알고리즘
❓ 플로이드-워셜
import java.io.*;
import java.util.*;
public class Main { // 플로이드
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n = Integer.parseInt(bf.readLine());
int m = Integer.parseInt(bf.readLine());
int arr[][] = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
arr[i][j] = Integer.MAX_VALUE;
if (i == j)
arr[i][j] = 0;
}
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(bf.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
arr[a - 1][b - 1] = Math.min(arr[a - 1][b - 1], c);
}
// [시작 노드, 끝 노드] = [시작 노드, 중간 노드] + [중간 노드, 끝 노드]
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
if (arr[j][i] == Integer.MAX_VALUE || arr[i][k] == Integer.MAX_VALUE)
continue;
arr[j][k] = Math.min(arr[j][k], arr[j][i] + arr[i][k]);
}
}
}
}
}