🌐 그래프 탐색 알고리즘 – DFS vs BFS
1. 그래프 탐색이란?
그래프 탐색 알고리즘은 노드와 간선으로 이루어진 구조에서 특정 노드까지 도달하거나 모든 노드를 방문하는 알고리즘이다.
대표적으로 DFS(Depth-First Search)와 BFS(Breadth-First Search)가 있다.
2. DFS (깊이 우선 탐색)
📌 개념
- 가장 깊은 노드까지 계속 들어갔다가, 막히면 다시 돌아오는(backtrack) 방식
- 스택 구조 기반 (재귀 or 직접 스택 사용 가능)
✅ 예시 코드 (C# – 재귀 사용)
void DFS(int node, bool[] visited, List<int>[] graph)
{
visited[node] = true;
Console.Write($"{node} ");
foreach (int neighbor in graph[node])
{
if (!visited[neighbor])
DFS(neighbor, visited, graph);
}
}
3. BFS (너비 우선 탐색)
📌 개념
- 가까운 노드부터 차례로 탐색, 점점 퍼져 나가는 방식
- 큐(Queue) 구조 기반
✅ 예시 코드 (C#)
void BFS(int start, bool[] visited, List<int>[] graph)
{
Queue<int> queue = new Queue<int>();
queue.Enqueue(start);
visited[start] = true;
while (queue.Count > 0)
{
int node = queue.Dequeue();
Console.Write($"{node} ");
foreach (int neighbor in graph[node])
{
if (!visited[neighbor])
{
visited[neighbor] = true;
queue.Enqueue(neighbor);
}
}
}
}
4. DFS vs BFS 비교
항목 | DFS | BFS |
구조 | 스택 / 재귀 | 큐 |
방문 순서 | 깊이 우선 | 너비 우선 |
구현 방식 | 재귀 or 명시적 스택 | 큐 |
장점 | 구현 간단, 백트래킹 유리 | 최단 거리 탐색에 유리 |
단점 | 최단 거리 보장 X | 메모리 많이 사용 |
대표 활용 | 미로 탐색, 백트래킹, 순열 | 최단 거리, 단계별 확산 |
5. 활용 예시
- DFS: 미로 찾기, 순열/조합, 백트래킹 문제
- BFS: 최단 거리, 최소 이동 횟수, 퍼지는 방식 (불 퍼짐, 바이러스 등)
6. 마무리 요약
- DFS는 재귀적, 깊이 있는 문제 해결에 적합
- BFS는 큐 기반, 최단 거리 탐색에 적합
- 그래프 탐색 문제는 대부분 이 두 알고리즘으로 해결 가능
- 실제 문제에서는 종종 양쪽 모두 시도해봐야 정답이 나올 때도 있음
'C#' 카테고리의 다른 글
C# - 벨만-포드 알고리즘 (Bellman-Ford Algorithm) vs 다익스트라 (0) | 2025.07.11 |
---|---|
C# - 다익스트라 알고리즘 (Dijkstra Algorithm) (0) | 2025.07.11 |
C# - 탐색 알고리즘 정리 – 선형 탐색 vs 이진 탐색 (0) | 2025.07.11 |
C# - 정렬 알고리즘 비교 요약 (1) | 2025.07.11 |
C# - 병합 정렬 (Merge Sort) (0) | 2025.07.11 |