Depth-first search 깊이 우선 탐색
풀이 과정
1. graph, 시작위치 v, visited 를 입력 받음.
2. visited[v]에 방문 표시를 함
3. graph[v] 리스트의 항목에 대해 방문한 적 없으면 dfs 재귀적으로 실행
백준 24479, 24480
# 24479, 24480
import sys
input = sys.stdin.readline # 빠른 입력 받기
sys.setrecursionlimit(10 ** 8) # 파이썬의 재귀 깊이를 늘려놓기
global order
order = 0
def dfs(graph, v, visited):
global order
order += 1
visited[v] = order
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
n, m, r = map(int, input().split())
graph = [[] for _ in range(n + 1)]
visited = [0 for _ in range(n + 1)]
for _ in range(m):
u, v = map(int, input().split())
graph[u].append(v)
graph[v].append(u)
for i in graph:
i.sort()
# i.sort(reverse=True)
dfs(graph, r, visited)
for i in visited[1:]:
print(i)
Breadth-first search 깊이 우선 탐색
import sys
from collections import deque
input = sys.stdin.readline
def bfs(graph, start, visited):
queue = deque([start])
order = 1
visited[start] = order
while queue:
v = queue.popleft()
for i in graph[v]:
if visited[i] == 0:
queue.append(i)
order += 1
visited[i] = order
n, m, r = map(int, input().split())
graph = [[] for _ in range(n+1)]
visited = [0 for _ in range(n+1)]
for _ in range(m):
u, v = map(int, input().split())
graph[u].append(v)
graph[v].append(u)
for i in graph:
i.sort()
# i.sort(reverse=True)
bfs(graph, r, visited)
for i in visited[1:]:
print(i)