본문 바로가기
코딩테스트

[백준] 11404번 '플로이드' - Java

by CuckooBird 2023. 7. 9.

문제


코드

import java.io.*;
import java.util.*;

public class Main {
	private static final BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
	private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	
	static final int INF = 9900001;
	
	private static boolean[] visited;
	private static int[] dist;
	private static int[][] node;
	
	public static void main(String[] args) throws IOException {
		StringTokenizer st = new StringTokenizer(bf.readLine());
		int n = Integer.parseInt(st.nextToken());
		
		st = new StringTokenizer(bf.readLine());
		int m = Integer.parseInt(st.nextToken());
		
		node = new int[n][n];
		
		for (int i = 0 ; i < n ; i++) {
            for (int j = 0 ; j < n ; j++) {
                node[i][j] = INF;

                if(i == j){
                    node[i][j] = 0;
                }
            }
        }
		
		for(int i = 0 ; i < m ; i++) {
			st = new StringTokenizer(bf.readLine());
			int x = Integer.parseInt(st.nextToken()) - 1;
			int y = Integer.parseInt(st.nextToken()) - 1;
			int v = Integer.parseInt(st.nextToken());
			
			if(node[x][y] > 0) {
				node[x][y] = Math.min(node[x][y], v);				
			} else {
				node[x][y] = v;
			}
		}
		
		floydWarshall(n);
		
		for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (node[i][j] == INF) {
                    node[i][j] = 0;
                }
                bw.write(node[i][j] + " ");
            }
            bw.write("\n");
        }
		
		bf.close();
		bw.flush();
		bw.close();
	}
	
	static void floydWarshall(int n) {
        for (int k = 0; k < n; k++) {
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    if (node[i][j] > node[i][k] + node[k][j]) {
                        node[i][j] = node[i][k] + node[k][j];
                    }
                }
            }
        }
    }
}