깊이 우선 탐색?
그래프 완전 탐색 기법 중 하나.
시작 노드에서 출발, 한쪽 분기로 최대 깊이 까지 탐색한 후, 다른 쪽 분기로 이동하여 최대 깊이까지 탐색, 이를 반복하는 알고리즘.
노드 수 : V, 에지 수 : E 일 때
시간 복잡도 : O(V+E)
구현 시 재귀 함수를 이용하므로 스택 오버플로*에 주의!
*스택 오버플로 : 재귀 함수가 호출 될 떄마다 스택 영역에 프레임이 쌓여 스택 메모리가 과부하를 겪는 현상.
재귀 함수 사용 시 중단 조건을 정확히 설정하자.
백준 : 11724번
https://www.acmicpc.net/problem/11724
#include <iostream>
#include <vector>
std::vector<std::vector<int>> edges;
std::vector<bool> visited;
void DFS(int node)
{
if (visited[node])
{
return;
}
visited[node] = true;
for (const int& i : edges[node])
{
DFS(i);
}
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
int N, M;
std::cin >> N >> M;
int count = 0;
edges.resize(N+1,std::vector<int>());
visited.resize(N + 1, false);
while (M--)
{
int s, e;
std::cin >> s >> e;
edges[s].push_back(e);
edges[e].push_back(s);
}
for (int i = 1; i <= N; ++i)
{
if (visited[i])
{
continue;
}
else
{
++count;
DFS(i);
}
}
std::cout << count;
}'알고리즘 > 탐색' 카테고리의 다른 글
| [알고리즘/탐색] 이진 탐색 (0) | 2024.11.01 |
|---|---|
| [알고리즘/탐색] BFS 너비 우선 탐색 (0) | 2024.10.24 |