티스토리 뷰

import java.util.Scanner;



class Main {

  private static int a;
  private static int b;
  private static int c;
  private static int n;
  private static int m;
  static int[][] d;
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    n = sc.nextInt();
    m = sc.nextInt();
    d = new int[n][n];
    // 5, 14 받음
    for(int i=0; i < n; i++){
      for (int j=0; j < n; j++){
        if(i == j){ d[i][j] = 0;}
        else{
          d[i][j] = 1000000000;
        }
      }
    }
    for(int i=0; i < m; i++){
      a = sc.nextInt() - 1;
      b = sc.nextInt() - 1;
      c = sc.nextInt();
      // 왜 min을 사용 해야 되나? => 1 4 1 , 1 4 2 같이 중복되서 입력 가능해서 
      d[a][b] = Math.min(d[a][b], c);
    }
    // 초기화 완료 
    
    floyd();

    for(int i=0; i < n; i++){
      for(int j=0; j < n; j++){
        if(d[i][j] >= 1000000000){
          System.out.print(0 + " ");
        }else{
        System.out.print(d[i][j] + " ");
        }
      }
      System.out.println();
    }
  }
  static void floyd() {
    for(int k = 0; k < n; k++){
      for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
          d[i][j] = Math.min(d[i][j], d[i][k] + d[k][j]);
        }
      }
    }
  }
}

 

플로이드 와샬 알고리즘 개념 문제이다

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함