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를 사용하는것이 유리
'백준 알고리즘 (Baekjoon Algorithm)' 카테고리의 다른 글
[파이썬] 백준 알고리즘 No.9205 맥주 마시면서 걸어가기 (0) | 2023.02.08 |
---|---|
[파이썬] 백준 알고리즘 No.24445 알고리즘 수업 - 너비 우선 탐색 2 (0) | 2023.02.08 |
[파이썬] 백준 알고리즘 No.24480 알고리즘 수업 - 깊이 우선 탐색 2 (0) | 2023.02.08 |
[파이썬] 백준 알고리즘 No.24479 알고리즘 수업 - 깊이 우선 탐색 1 (0) | 2023.02.08 |
[파이썬] 백준 알고리즘 No.1753 최단경로 (0) | 2022.03.15 |