import sys
sys.setrecursionlimit(10 ** 6)
input = sys.stdin.readline

n, m, r = map(int, input().split())
graph = [[] for _ in range(n + 1)]
visited = [False] * (n + 1)
result = [0] * (n + 1)
count = 1

for _ in range(m):
    x, y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)

data = [r]
while data:
    cur = data.pop(0)
    visited[cur] = True
    result[cur] = count
    count += 1

    for i in sorted(graph[cur]):
        if not visited[i]:
            visited[i] = True
            data.append(i)

for i in result[1:]:
    print(i)

나의 코드

 

bfs로, 이전 dfs와 다르게 재귀가 아닌 반복으로 풀었다.

주어진 데이터 수가 작아 리스트 자료형을 사용했으나 방대해진다면 deque를 불러와 popleft를 사용하는것이 유리

+ Recent posts