
DFS(Depth-First Search, 깊이 우선 탐색)는 트리 또는 그래프에서 한 경로를 끝까지 탐색한 후, 더 이상 갈 곳이 없으면 다시 이전 단계로 돌아가서 다른 경로를 탐색하는 알고리즘이다.
DFS는 재귀 혹은 스택을 통해 구현되며, 노드 간의 깊은 관계를 파악할 때 유용하다.
def dfs(node):
visited[node] = True
for next_node in graph[node]:
if not visited[next_node]:
dfs(next_node)
BFS(Breadth-First Search, 너비 우선 탐색)는 트리 또는 그래프에서 가까운 노드부터 먼저 탐색하는 알고리즘이다.
BFS는 큐(Queue)를 이용해서 구현되며, 시작점에서 각 노드까지의 최단 거리를 구하는 데 유용하다.
from collections import deque
def bfs(start):
queue = deque([start])
visited[start] = True
while queue:
node = queue.popleft()
for next_node in graph[node]:
if not visited[next_node]:
visited[next_node] = True
queue.append(next_node)
| 알고리즘 | 구현 방식 | 특징 | 활용 예시 |
|---|---|---|---|
| DFS | 재귀 / 스택 | 깊이 우선 탐색, 경로 추적에 유리 | 미로 탐색, 그래프 연결 요소 탐색 |
| BFS | 큐 | 너비 우선 탐색, 최단 거리 탐색에 유리 | 최단 경로, 레벨별 탐색 |
| 백트래킹 | 재귀 + 가지치기 | 유망하지 않으면 탐색 중단, 조합 탐색 | 순열/조합, N-Queen, 스도쿠 |