❓ 플로이드-워셜이란?
음수 사이클이 없는 그래프에서 모든 노드 간에 최단 거리를 구하는 알고리즘
❓ 플로이드-워셜
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]);
}
}
}
}
}
'☁️정리 > ❄️알고리즘' 카테고리의 다른 글
[Algorithm] LCS (Longest Common Subsequence, 최장 공통 부분 수열) (0) | 2023.10.18 |
---|---|
[Algorithm] 피사노 주기 (Pisano period) (0) | 2023.06.02 |
[Algorithm] DFS/BFS (0) | 2022.01.15 |
[Algorithm] 순차 탐색, 이진 탐색 (0) | 2021.10.20 |
[Algorithm] 최소공배수, 최대공약수 (0) | 2021.08.23 |