코테 준비/DFS, BFS

[백준] 11403. 경로찾기 (bfs)

imsmile2000 2023. 2. 2. 04:23

풀이1. BFS (시간 가장 빠름)

from collections import deque
def bfs(graph,start,visited): #bfs
    queue=deque([start])
    queue.append(start)
    while queue:
        v=queue.popleft()
        for i in range(n):
            if graph[v][i]==1 and not visited[i]:
                queue.append(i)
                visited[i]=True
                result[start][i]=1 #result[0][i]=1, result[1][i]=1...

n=int(input())
graph=[[0]*n for _ in range(n)]
result=[[0]*n for _ in range(n)] #정답 인접행렬
for i in range(n):
    graph[i]=list(map(int,input().split()))

for i in range(n):
    visited=[False]*n #매번 visited를 초기화해야함
    bfs(graph,i,visited) #bfs(0)~bfs(n-1)까지

for i in result: #인접행렬 출력
    print(*i)

 

풀이2. 플로이드-워셜 (생각만으로는 이렇게 못풀듯)

n=int(input())
graph=[[0]*n for _ in range(n)]
for i in range(n):
    graph[i]=list(map(int,input().split()))

for i in range(n):
    for j in range(n):
        for k in range(n):
            if graph[j][i]==1 and graph[i][k]==1:
                graph[j][k]=1

for i in range(n):
    print(*graph[i])