백준

백준 11404 플로이드(Java)

Park DJ 2023. 2. 17. 15:58

https://www.acmicpc.net/problem/11404

 

11404번: 플로이드

첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가

www.acmicpc.net


 

Java 코드

 


import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    StringBuilder sb = new StringBuilder();
    
    int n = sc.nextInt();
    int m = sc.nextInt();
    int[][] arr = new int[n + 1][n + 1];
    int max = 1000000000;

    for(int i = 1; i <= n; i++) {
      for(int j = 1; j <= n; j++) {
        if(i == j) arr[i][j] = 0;
        else arr[i][j] = max;
      }
    }

    for(int i = 0; i < m; i++) {
      int a = sc.nextInt();
      int b = sc.nextInt();
      int c = sc.nextInt();
      if(arr[a][b] > c) arr[a][b] = c;
    }

    for(int k = 1; k <= n; k++) {
      for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
          if(arr[i][j] > arr[i][k] + arr[k][j]) arr[i][j] = arr[i][k] + arr[k][j];
        }
      } 
    }

    for(int i = 1; i <= n; i++) {
      for(int j = 1; j <= n; j++) {
        if(arr[i][j] == max) sb.append(0+" ");
        else sb.append(arr[i][j]+" ");
      }
      sb.append("\n");
    }

    System.out.println(sb);
  }
}