Coding Test/BaekJoon_Python

백준 11403 <경로 찾기> Python

JunOnJuly 2024. 12. 20. 14:49
728x90

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


플로이드-워셜 알고리즘을 사용해 풀 수 있습니다.

시작 노드와 중간 노드가 연결되어있고, 중간 노드와 끝 노드가 연결되어 있으면 시작 노드와 끝 노드도 연결되어 있음을 알 수 있습니다.


import sys

input = sys.stdin.readline


def solution(N, mat):
    ## 플로이드-워셜
    # 중간 노드
    for c in range(N):
        # 시작 노드
        for f in range(N):
            # 끝 노드
            for b in range(N):
                # 시작 - 중간 / 중간 - 끝 이 이어져 있으면
                if mat[f][c] and mat[c][b]:
                    # 시작 - 끝도 이어져 있음
                    mat[f][b] = 1

    for i in mat:
        print(*i)


# 입력
N = int(input().strip())
mat = [list(map(int, input().strip().split())) for _ in range(N)]

solution(N, mat)
728x90