Post

10-2. BFS (Breadth-First Search)

10-2. BFS (Breadth-First Search)

1. BFS란?

Breadth-First Search: 너비 우선 탐색

  • DFS가 “한 방향으로 끝까지 파고들었다면”,
  • BFS는 가까운 노드부터 차례차례 넓게 탐색


💡 동작 방식

예시 그래프:

1
2
3
4
5
6
7
8
9
10
11
12
13
graph = {
	1: [2, 3],
	2: [4],
	3: [5],
	4: [],
	5: []
}

    1
   / \
  2   3
 /     \
4       5

1 → 2 → 3 → 4 → 5

→ 즉, 레벨 단위로 퍼져나감




2. BFS 기본 구조

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from collections import deque

def bfs(start):
	queue = deque([start])
	visited[start] = True

	while queue:
		v = visited.popleft()
		print(v, end=' ')

		for neighbor in graph[v]:
			if not visited[neighbor]:
				visited[neighbor] = True
				queue.append(neighbor)




3. DFS vs BFS 차이

항목DFSBFS
구조재귀/스택
방향깊이 우선너비 우선
최단거리❌ 보장 안함✅ 보장
백트래킹 용도적합부적합
탐색 순서깊이 → 깊이레벨 → 레벨




4. BFS 예제 1 – 기본 그래프 순회

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from collections import deque

def bfs(start):
	queue = deque([start])	
	visited[start] = True

	while queue:
		v = queue.popleft()
		print(v, end = ' ')
		for neighbor in graph[v]:
			if not visited[neighbor]:
				visited[neighbor] = True
				queue.append(neighbor)
	return


graph = {
	1: [2, 3],
	2: [4, 5],
	3: [],
	4: [],
	5: []
}
'''
    1
   / \
  2   3
 / \    
4   5     
'''

visited = [False] * 6

bfs(1)



''' 출력
1 2 3 4 5
'''




5. BFS 핵심 개념 요약

항목설명
탐색 방식가까운 곳부터 탐색
자료구조큐 (Queue) 사용
방문 순서레벨 순서 (거리 기준)
구현 난이도DFS보다 약간 복잡하지만 안전함 (스택 오버플로우 없음)
용도최단거리 탐색, 거리 측정, 경로 복원 등
This post is licensed under CC BY 4.0 by the author.