깊이 우선 탐색(depth first search)은 그래프 완전 탐색 기법 중 하나이다. 깊이 우선 탐색은 그래프의 시작 노드에서 출발하여 탐색할 한쪽 분기를 정하여 최대 깊이까지 탐색을 마친 후 다른 쪽 분기로 이동하여 다시 탐색을 수행하는 알고리즘이다.
깊이 우선 탐색의 특징으로 보통 재귀 함수나 자료구조중에 스택을 이용하여 구현하는데 DFS는 선출후입의 구조를 가지고 있기 때문이다.
시간복잡도는 O(V + E)로 V는 노드의 개수이고, E는 엣지의 개수이다.
재귀 함수를 이용하여 구현하면 스택오버플로우를 유의하며 구현하여야 한다.
깊이 우선 탐색의 핵심 이론
DFS는 한 번 방문한 노드를 다시 방문하면 안 되므로 노드 방문 여부를 체크할 추가적인 배열이 필요하다.
https://mngprog.tistory.com/34
11724번 (silver 2)
https://www.acmicpc.net/problem/11724간단하게 dfs나 bfs를 구현해 탐색하면 해결할 수 있는 문제이다. #include #include using namespace std;void DFS(vector>&, vector&, int);int main() { cin.tie(0)->sync_with_stdio(false); int N, E; cin
mngprog.tistory.com
위의 백준 문제를 DFS를 이용하여 해결하면 이해하기 쉽다.
'Algorithm' 카테고리의 다른 글
4-2. 정렬(BFS) (0) | 2025.01.22 |
---|---|
3-3 정렬(RadixSort) (0) | 2025.01.20 |
3-2 정렬(Merge Sort) (0) | 2025.01.19 |
3-1 정렬(Quick Sort) (0) | 2025.01.18 |
2.투 포인터 (0) | 2025.01.18 |