📌 문제

💯 정답
import sys
from collections import deque
input = sys.stdin.readline
def dfs(graph, v, visit):
visit[v] = True
print(v, end=' ')
for i in graph[v]:
if not visit[i]:
dfs(graph, i, visit)
def bfs(graph, start, visit):
queue = deque([start])
visit[start] = True
while queue:
v = queue.popleft()
print(v, end=' ')
for i in graph[v]:
if not visit[i]:
queue.append(i)
visit[i] = True
N, M, V = map(int, input().split())
graph = [[] for _ in range(N+1)]
for _ in range(M):
x, y = map(int, input().split())
graph[x].append(y)
graph[y].append(x)
for i in range(1, N+1):
graph[i].sort()
visit = [False] * (N+1)
dfs(graph, V, visit)
print()
visit = [False] * (N+1)
bfs(graph, V, visit)
📝 설명
• 깊이 우선 탐색은 for문만 돌면 연결된 인접 리스트들을 모두 탐색해 방문 처리가 가능하다.
• 너비 우선 탐색은 큐에 맨 상층? 노드를 탐색하고 각각의 노드들 하나씩 pop한다.
그 노드들에 연결된 다음 층 노드를 큐에 넣고 방문한다.
또, 그 노드들 하나씩 pop해 연결된 다음 층 노드를 큐에 넣고 방문한다.
이러한 과정을 큐에 노드가 없을 때까지(모든 노드 방문) 계속 반복하면 된다.