알고리즘
백준 1719번 택배 (JAVA)
박카스마시며코딩
2022. 2. 21. 16:40
https://www.acmicpc.net/problem/1719
1719번: 택배
명우기업은 2008년부터 택배 사업을 새로이 시작하기로 하였다. 우선 택배 화물을 모아서 처리하는 집하장을 몇 개 마련했지만, 택배 화물이 각 집하장들 사이를 오갈 때 어떤 경로를 거쳐야 하
www.acmicpc.net
저는 해당 문제를 플루이드-워샬로 해결하였습니다.
처음에 연결되면 경유지를 그 값으로 초기화시켜주었습니다.
그리고 플루이드-워샬 알고리즘으로 값이 변경되면 경유지도 같이 변경해주었습니다.
package BOJ.ETC;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_1719 {
private static final int INF = 987654321;
private static void floyd(int[][] result ,int[][] map, int size){
for(int k = 1 ; k <= size ; k++){
for(int i = 1 ; i <= size ; i++){
for(int j = 1 ; j <= size ; j++){
if(map[i][j] > map[i][k] + map[k][j]){
map[i][j] = map[i][k] + map[k][j];
result[i][j] = result[i][k];
}
}
}
}
}
private static void printArr(int[][] arr, int size){
for(int i = 1 ; i <= size ; i++){
for(int j = 1; j <= size ; j++){
if(i == j) {
System.out.print("- ");
}else{
System.out.print(arr[i][j]+" ");
}
}
System.out.println();
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
Function<String,Integer> stoi = Integer::parseInt;
int n = stoi.apply(st.nextToken());
int m = stoi.apply(st.nextToken());
int[][] map = new int[n+1][n+1];
int[][] result = new int[n+1][n+1];
for(int i = 1 ; i <= n ; i++){
for(int j = 1; j <= n ; j++){
if(i != j){
map[i][j] = INF;
}
}
}
for(int i = 0 ; i < m ; i++){
st = new StringTokenizer(br.readLine()," ");
int a = stoi.apply(st.nextToken());
int b = stoi.apply(st.nextToken());
int c = stoi.apply(st.nextToken());
map[a][b] = c;
map[b][a] = c;
result[a][b] = b;
result[b][a] = a;
}
floyd(result ,map, n);
printArr(result,n);
}
}