DFS는 "깊이 우선 탐색"이라는 말 그대로,
한 정점에서 시작해서 갈 수 있는 만큼 계속 깊이 들어갔다가, 더 이상 못 가면 다시 돌아와서 다른 경로를 탐색하는 방식이야.
DFS는 보통 스택(Stack) 구조로 동작해.
그래프:
1
| \
2 3
|
4
1 → 2 → 3 → 4
(인접 리스트 순서에 따라 탐색 순서는 바뀔 수 있어)
dfs(1) 호출dfs(2) 호출dfs(1) → 다음 인접한 3 → dfs(3) 호출dfs(4) 호출dfs(3) → 종료dfs(1) → 종료| 항목 | 설명 |
|---|---|
| 탐색 순서 | 깊이 있는 노드부터 탐색 |
| 사용 자료구조 | 스택 (혹은 재귀 호출을 통한 시스템 콜 스택) |
| 재귀? | (보통 재귀로 구현함) |
| 경로 찾기 문제 | 백트래킹, 순열 조합, 미로 탐색 등에서 유용 |
| 시간 복잡도 | O(V + E) (V: 정점 수, E: 간선 수) |
| 기준 | DFS | BFS |
|---|---|---|
| 탐색 순서 | 깊이 우선 | 너비 우선 |
| 자료구조 | 스택 (또는 재귀) | 큐 (Queue) |
| 구현 방식 | 보통 재귀 기반 | 반복문 기반 |
| 사용 예시 | 백트래킹, 퍼즐, 조합 탐색 등 | 최단 거리, 네트워크 탐색 등 |
예제 그래프:
1
/ \
2 3
/ \
4 5
1 → 2 → 3 → 4 → 5
1 → 2 → 3 → 4 → 5
| 구분 | DFS | BFS |
|---|---|---|
| 자료구조 | 스택 or 재귀 호출 | 큐 (Queue) |
| 방문 순서 | 한 방향으로 계속 깊이 들어감 | 가까운 정점부터 차례로 탐색 |
| 사용 목적 | 모든 경로 탐색, 백트래킹 등 | 최단 거리 탐색, 네트워크 탐색 등 |
| 구현 방식 | 재귀 함수 or 명시적 스택 | 반복문 + 큐 활용 |
이게 바로 DFS의 기본 흐름이야~
BFS처럼 넓게 퍼져나가는 게 아니라, 한 줄기 길을 따라 깊게 들어가는 방식이지.