๐Ÿ“– [๋ฐฑ์ค€์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด] Q.1956 ์šด๋™ ๋ฌธ์ œ ํ’€์ด

๐Ÿ“– ๋ฌธ์ œ

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

V๊ฐœ์˜ ๋งˆ์„์™€ E๊ฐœ์˜ ๋„๋กœ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๋„์‹œ๊ฐ€ ์žˆ๋‹ค. ๋„๋กœ๋Š” ๋งˆ์„๊ณผ ๋งˆ์„ ์‚ฌ์ด์— ๋†“์—ฌ ์žˆ์œผ๋ฉฐ, ์ผ๋ฐฉ ํ†ตํ–‰ ๋„๋กœ์ด๋‹ค.

๋งˆ์„์—๋Š” ํŽธ์˜์ƒ 1๋ฒˆ๋ถ€ํ„ฐ V๋ฒˆ๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋‹ค๊ณ  ํ•˜์ž.

๋‹น์‹ ์€ ๋„๋กœ๋ฅผ ๋”ฐ๋ผ ์šด๋™์„ ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ํ•œ๋‹ค. ์šด๋™์„ ํ•œ ํ›„์—๋Š” ๋‹ค์‹œ ์‹œ์ž‘์ ์œผ๋กœ ๋Œ์•„์˜ค๋Š” ๊ฒƒ์ด ์ข‹๊ธฐ ๋•Œ๋ฌธ์—, ์šฐ๋ฆฌ๋Š” ์‚ฌ์ดํด์„ ์ฐพ๊ธฐ๋ฅผ ์›ํ•œ๋‹ค.

๋‹จ, ๋‹น์‹ ์€ ์šด๋™์„ ๋งค์šฐ ๊ท€์ฐฎ์•„ํ•˜๋ฏ€๋กœ, ์‚ฌ์ดํด์„ ์ด๋ฃจ๋Š” ๋„๋กœ์˜ ๊ธธ์ด์˜ ํ•ฉ์ด ์ตœ์†Œ๊ฐ€ ๋˜๋„๋ก ์ฐพ์œผ๋ ค๊ณ  ํ•œ๋‹ค.

๋„๋กœ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋„๋กœ์˜ ๊ธธ์ด์˜ ํ•ฉ์ด ๊ฐ€์žฅ ์ž‘์€ ์‚ฌ์ดํด์„ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋‘ ๋งˆ์„์„ ์™•๋ณตํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์‚ฌ์ดํด์— ํฌํ•จ๋จ์— ์ฃผ์˜ํ•œ๋‹ค.

๐Ÿ” ์ ‘๊ทผ๋ฒ•

boj Q.1956 ์šด๋™ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์šด๋™์„ ์œ„ํ•ด ์‹œ์ž‘์ ์œผ๋กœ๋ถ€ํ„ฐ ์ถœ๋ฐœํ•ด ๋‹ค์‹œ ์‹œ์ž‘์ ์œผ๋กœ ๋Œ์•„์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์ค‘์—์„œ๋„ ๊ฐ€์žฅ ์ตœ์†Œ์˜ ๊ธธ์ด์ธ ์‚ฌ์ดํด์„ ์ฐพ์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์ง€์ ์— ๋Œ€ํ•ด์„œ ์‚ฌ์ดํด์„ ํ™•์ธํ•ด์•ผํ•˜๋ฏ€๋กœ

ํ”Œ๋กœ์ด๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋กœ์ด๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ๋ชจ๋“  ์‹œ์ž‘์ ๋ถ€ํ„ฐ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•œ ํ›„

์‹œ์ž‘์ ๊ณผ ๋„์ฐฉ์ ์ด ๊ฐ™์€ ์ง€์ ์˜ ๊ฑฐ๋ฆฌ๋“ค์„ ๋น„๊ตํ•˜๋ฉด

๋„๋กœ์˜ ๊ธธ์ด์˜ ํ•ฉ์ด ๊ฐ€์žฅ ์ž‘์€ ์‚ฌ์ดํด์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ป ์ฝ”๋“œ


package problem.shortest.floyd.Q1956;

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

public class Main_1956 {
    static int V ,E;
    static int[][] graph;
    static int INF = 1000000;
    static int min = INF;

    public static void main(String[] args) throws IOException {
        input();
        solve();
        if(min==INF)
            System.out.println(-1);

        else
            System.out.println(min);
    }
    private static void input() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String temp[] = br.readLine().split(" ");
        V = Integer.parseInt(temp[0]);
        E = Integer.parseInt(temp[1]);
        graph = new int[V + 1][V + 1];
        for(int i=0; i<graph.length; i++) {
            Arrays.fill(graph[i], INF);
        }
        for(int i = 0; i< E; i++){
            temp = br.readLine().split(" ");
            int start = Integer.parseInt(temp[0]);
            int end = Integer.parseInt(temp[1]);
            int cost = Integer.parseInt(temp[2]);

            graph[start][end] = cost;
        }
        br.close();
    }

    private static void solve(){
        floyd();
        for(int i=1; i<=V; i++) {
            min = Math.min(min, graph[i][i]);
        }
    }

    private static void floyd() {
        for(int k = 1; k<= V; k++){
            for(int i = 1; i<= V; i++){
                for(int j = 1; j<= V; j++){
                    graph[i][j] = Math.min(graph[i][j],graph[i][k]+graph[k][j]);
                }
            }
        }
    }
}


Written on April 4, 2021