๐Ÿ“– [๋ฐฑ์ค€์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด] Q.11403 ๊ฒฝ๋กœ ์ฐพ๊ธฐ ๋ฌธ์ œ ํ’€์ด

๐Ÿ“– ๋ฌธ์ œ

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

๊ฐ€์ค‘์น˜ ์—†๋Š” ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ G๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ชจ๋“  ์ •์  (i, j)์— ๋Œ€ํ•ด์„œ, i์—์„œ j๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

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

boj Q.11403 ๊ฒฝ๋กœ ์ฐพ๊ธฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด

๋ชจ๋“  ์ •์  (i,j)์— ๋Œ€ํ•ด์„œ i์—์„œ j๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ์ •์ ์˜ ์ถœ๋ฐœ์ง€์—์„œ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ๊ฒฝ๋กœ/๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

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

๋ฐ”๋กœ ์ง์ ‘์ ์œผ๋กœ i ์—์„œ j๋กœ ๊ฐ€์ง€ ๋ชปํ•˜๋”๋ผ๋„

์ค‘๊ฐ„์— ๋‹ค๋ฅธ ์ง€์ ์„ ํ†ตํ•ด ๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

if( graph[i][k] == 1 && graph[k][j] == 1){
        graph[i][j] = 1;
}

i์—์„œ k๋กœ k์—์„œ j๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๊ฒฐ๊ตญ

i์—์„œ j๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ

์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป ์ฝ”๋“œ

package problem.shortest.floyd.Q11403;

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

public class Main_11403 {
    static int N;
    static int[][] graph;

    public static void main(String[] args) throws IOException {
        input();
        floyd();
        print();
    }
    private static void input() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        graph = new int[N + 1][N + 1];
        for(int i=0; i<N; i++){
            String temp[] = br.readLine().split(" ");
            for(int j=0; j<N; j++){
                graph[i][j] = Integer.parseInt(temp[j]);
            }
        }
        br.close();
    }

    private static void floyd() {
        for(int k=0; k<N; k++){
            for(int i=0; i<N; i++){
                for(int j=0; j<N; j++){
                    if( graph[i][k] == 1 && graph[k][j] == 1){
                        graph[i][j] = 1;
                    }
                }
            }
        }
    }

    private static void print(){
        for(int i=0; i<N; i++){
            for(int j=0; j<N; j++){
                System.out.print(graph[i][j]+" ");
            }
            System.out.println();
        }
    }


}


Written on March 18, 2021