문제 풀이 방법
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()