반응형
12-24 07:02
Today
Total
«   2024/12   »
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 31
관리 메뉴

개발하는 고라니

[백준] 11404번 : 플로이드 본문

Programming/백준

[백준] 11404번 : 플로이드

조용한고라니 2021. 2. 27. 18:24
반응형
 

11404번: 플로이드

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

www.acmicpc.net


기본적인 플로이드-와샬 알고리즘 문제. 플로이드 와샬의 응용이 아니므로 간단하게 풀 수 있다.

    static void Floyd(int n){

        for(int k=1; k<=n; k++)
            for(int i=1; i<=n; i++)
                for(int j=1; j<=n; j++)
                    if(i == j) continue;
                    else 
                       d[i][j] = Math.min(d[i][j], d[i][k] + d[k][j]);

        for(int i=1; i<=n; i++){
            for(int j=1; j<=n; j++)
                System.out.print(d[i][j] != INF? d[i][j] + " " : 0 + " ");
            System.out.println();
        }
    }

# Code </>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

    static final int INF = 1000000000;
    static int[][] d = new int[101][101];

    static void Floyd(int n){

        for(int k=1; k<=n; k++)
            for(int i=1; i<=n; i++)
                for(int j=1; j<=n; j++)
                    if(i == j) continue;
                    else d[i][j] = Math.min(d[i][j], d[i][k] + d[k][j]);

        for(int i=1; i<=n; i++){
            for(int j=1; j<=n; j++)
                System.out.print(d[i][j] != INF? d[i][j] + " " : 0 + " ");
            System.out.println();
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        int m = Integer.parseInt(br.readLine());

        for(int i=1; i<=n; i++)
            Arrays.fill(d[i], INF);

        for(int i=0; i<m; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());

            int depart = Integer.parseInt(st.nextToken());
            int arrive = Integer.parseInt(st.nextToken());
            int distance = Integer.parseInt(st.nextToken());

            d[depart][arrive] = Math.min(d[depart][arrive], distance);
        }

        Floyd(n);
    }
}
반응형
Comments