티스토리 뷰

알고리즘/백준

백준 11403 (경로 찾기) - java

김다미김태리신시아 2023. 8. 29. 00:31

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

 

11403번: 경로 찾기

가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 길이가 양수인 경로가 있는지 없는지 구하는 프로그램을 작성하시오.

www.acmicpc.net

import java.util.*;
import java.io.*;

public class Main {
    static int n = 0;
    static int[][] board;

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

        n = Integer.parseInt(st.nextToken());
        board = new int[n+1][n+1];

        for(int i=1;i<=n;i++){
            st = new StringTokenizer(br.readLine(), " ");

            for(int j=1;j<=n;j++){
                board[i][j] = Integer.parseInt(st.nextToken());
            }
        }
        search();

        br.close();
    }

    static void search(){
        int[][] dis = new int[n+1][n+1];

        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(board[i][j] == 1)
                    dis[i][j] = 1;

            }
        }

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

        for(int i= 1;i<=n;i++){
            for(int j=1;j<=n;j++){
                System.out.print(dis[i][j]+ " ");
            }
            System.out.println();
        }
        System.out.println();
    }
}