가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오.
첫째 줄에 정점의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄부터 N개 줄에는 그래프의 인접 행렬이 주어진다. i번째 줄의 j번째 숫자가 1인 경우에는 i에서 j로 가는 간선이 존재한다는 뜻이고, 0인 경우는 없다는 뜻이다. i번째 줄의 i번째 숫자는 항상 0이다.
총 N개의 줄에 걸쳐서 문제의 정답을 인접행렬 형식으로 출력한다. 정점 i에서 j로 가는 경로가 있으면 i번째 줄의 j번째 숫자를 1로, 없으면 0으로 출력해야 한다.
풀이
a-> b로 가는 길이 있다면 1로 표시되는 입력값을 가진다.
이 값들을 리스트에 새로운 방식으로 만들어 주게 된다 .
a번째 인덱스 리스트 = [b,@]
한 줄씩 visited를 만들어서 이 줄을 root라고 선언하고
root에서 갈수 있는 모든 점들을 visited로 만들어준다.
import sys
sys.stdin =open('input.txt')
N = int(input())
graph = [[]for _ in range(N)] # 그래프 형태 바꾸기
for i in range(N):
ls =list(map(int,input().split()))
for j in range(N):
if ls[j]==1:
graph[i].append(j)
visit = [[0]*N for _ in range(N)] # a->b로 가는 길의 유무
def dfs(start): # 시작값 start
global root # root는 한 줄 씩 만들어 진다고 보면 됨
# root번째 줄의 visit를 만드는 과정
for i in graph[start]: # start에서 나오는 길 중에
if visit[root][i]==0: # root-> i 가 아직 안갔으면
visit[root][i]=1 # 방문처리하고 , i->다른거로 가는 길 찾기
dfs(i)
for root in range(N): # N까지 한 줄 씩 visit를 만드는 과정
dfs(root)
for v in visit:
print(*v)