백준 11403 Python

Heejun Kim·2022년 5월 26일
0

Coding Test

목록 보기
16/51

문제 풀이 방법
1. 방향이 있는 그래프에서, i 노드에서 j 노드까지 가는 길이 있느지 확인하는 문제로 dfs 탐색이 필요하다고 판단
2. 탐색 과정 중에 기존 graph에 탐색 결과를 표시할 경우 다음 탐색 과정에 영향을 주기에 결과만 담을 answer 변수 선언
3. i, j 노드를 탐색할 때마다 경로 사이에 있는 노도들의 이전 방문 정보가 필요하기 때문에 i, j를 선언해 줄 때 visit 변수 역시 초기화해줘서 넘김

import sys


# dfs 함수 선언
def dfs(start, end, visit):
    stack = []
    stack.append(GRAPH[start])

    while stack:
        temp = stack.pop()
        for i in range(len(temp)):
            if temp[i] == 1 and end == i:
                return True
            if temp[i] == 1 and not visit[i]:
                visit[i] = True
                stack.append(GRAPH[i])
    return False


# 문제 입력 시작
input = sys.stdin.readline
N = int(input())
GRAPH = []
answer = [[0 for _ in range(N)] for _ in range(N)]

for n in range(N):
    GRAPH.append(list(map(int, input().split())))

# dfs 탐색 시작
for start in range(N):
    for end in range(N):
        visit = [False] * N
        if dfs(start, end, visit):
            answer[start][end] = 1

# 결과 출력
for row in range(N):
    for col in range(N):
        print(answer[row][col], end=" ")
    print()

0개의 댓글