Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Tags
more
Archives
Today
Total
관리 메뉴

forDevLife

[백준] 11403 - 경로 찾기 본문

알고리즘

[백준] 11403 - 경로 찾기

JH_Lucid 2021. 7. 15. 18:11

플로이드 워셜로 풀었다.

i -> j를 먼저 입력 받았고, k를 거쳐서 갈 경우를 반영하여 최소 거리를 계산할 수 있다.

1->1은 다시 돌아오는 경우이므로, i->j && j->k 경로가 둘 다 1일 경우 i->j는 있는 경로가 되게 된다.

 

플로이드 워셜 참고 : 

https://m.blog.naver.com/PostView.nhn?blogId=ndb796&logNo=221234427842&proxyReferer=https:%2F%2Fwww.google.com%2F

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

public class Main {

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

        int[][] arr = 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++) {
                arr[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        // k = 거쳐가는 노드
        for (int k = 1; k <= N; k++) {
            //i = 출발 노드
            for (int i = 1; i <= N; i++) {
                //j = 도착 노드
                for (int j = 1; j <= N; j++) {
                    if (arr[i][k] == 1 && arr[k][j] == 1) {
                        arr[i][j] = 1;
                    }
                }
            }
        }
        StringBuffer sb = new StringBuffer();
        for(int i=1; i<=N; i++) {
            for(int j=1; j<=N; j++) {
                sb.append(arr[i][j] + " ");
            }
            sb.append("\n");
        }
        System.out.println(sb.toString());
        br.close();
    }
}
Comments