깊이 우선 탐색(Depth First Search)은 DFS라고도 불리며 그래프를 순회하는 방법 중에 하나이다. 깊이 우선 탐색은 한 정점을 기준으로 인접한 정점을 방문한 뒤 방문한 정점을 기준으로 다시 인접한 정점을 방문하는 방식의 재귀적인 방법으로 방문을 한다. 깊이 우선 탐색은 다음과 같은 방법으로 진행된다.
- 깊이 우선 탐색을 시작할 정점을 선택한다.
- 선택된 정점을 방문 처리한다.
- 정점 v에 인접한 정점들에 대해
3-1. 방문되지 않은 정점이 존재하면 정점 v를 스택에 push하고, v의 인접 정점들 가운데 방문되지 않은 정점 w를 선택하여 2의 과정부터 다시 시작한다.
3-2. 방문되지 않은 정점이 존재하지 않는다면 가장 최근에 스택에 push된 정점을 pop하여 3의 과정부터 다시 사작한다. - stack이 빌 때까지 2, 3과정을 반복한다.
깊이 우선 탐색은 스택이나 재귀 함수를 통해 구현할 수 있다. 일반적으로 재귀 함수를 많이 사용한다. 하지만 재귀 함수도 시스템적으로는 스택을 사용하기 때문에 결국 스택의 형태로 구현된다. 다음은 깊이 우선 탐색의 예시이다.
정점 0 방문
처음에 방문할 정점을 정한다. 이번 예시에서는 정점 0을 방문한다. 그리고 방문함과 동시에 스택에 넣어준다.
정점 1 방문
정점 1을 방문한 후 스택에 넣어준다.
정점 2 방문
정점 2를 방문한 후 스택에 넣어준다.
정점 4 방문
정점 4를 방문하기 전에 정점 2에서는 더 이상 인접한 정점에 방문할 수 없다. 그러면 스택에서 pop을 한다. 이전 스택에서 pop을 하면 1이 가장 위에 올라오고 그러면 1와 연결된 정점인 4를 방문할 수 있다. 방문하면서 4를 스택에 넣어준다.
정점 3 방문
정점 3를 방문하고 스택에 넣어준다.
정점 5 방문
정점 5을 방문하고 스택에 넣어준다.
정점 6 방문
정점 6을 방문하고 스택에 넣어준다.
깊이 우선 탐색 종료
모든 정점을 방문했기 때문에 깊이 우선 탐색은 종료된다. 종료될 때는 앞서 2번에서 4번 정점을 방문할 때 스택에서 없어지는 것처럼 이제 더 이상 방문할 정점이 없기 때문에 스택에서는 자동적으로 함수가 종료됨과 동시에 스택은 비워지게 된다.
'자료구조' 카테고리의 다른 글
신장 트리(Spanning Tree) (0) | 2022.03.30 |
---|---|
너비 우선 탐색(BFS : Breadth First Search) (0) | 2022.03.30 |
그래프 표현 (2) | 2022.03.30 |
그래프(Graph) (0) | 2022.03.30 |
AVL 트리(AVL Tree) (0) | 2022.03.29 |