깊이 우선 탐색이란?
정점(V ; Vertex) 와 간선 (E ; Edge)로 구성된 그래프 (G ;Graph) 가 존재할 때 G(V,E)
임의의 정점 A를 시작으로 깊이순(재귀적)으로 그래프를 탐색하는 알고리즘이다.
예를 들어 아래와 같이 구성된 그래프 G(V,E) 가 있다고 하자.
5번 정점(V) 부터 시작해서 인접한 정점 중 작은 번호를 가진 정점부터 탐색을 한다고 하면,
5보다 작은 정점인 4번 정점을 탐색하고 1번 정점을 탐색하게 된다.
그리고 더 이상 탐색할 정점이 없다.
탐색할 위치가 남아있는 정점으로 다시 돌아간다. 그러면 5번정점으로 돌아가게 된다.
5번 탐색 -> 4번 -> 1번
그러면 이후 6번 정점을 탐색하게 되고 3번 정점을 탐색하게 된다.
그리고 더이상 탐색할 정점이 없다.
탐색할 위치가 남아있는 정점인 6번 정점에서 다시 탐색한다.
5번 -> 6번 -> 3번
6번 정점에서 9번정점을 탐색할 수 있으므로 9번정점을 탐색한다.
9번을 탐색한 이후 탐색할 수 있는 정점이 없으므로 탐색이 가능한 정점으로 돌아간다.
그러면 6번정점에 인접한 정점은 모두 탐색하였으므로 5번정점으로 돌아간다.
이후 5번정점으로 돌아가서 8번정점 그리고 7번정점을 탐색할 수 있고, 더 이상 탐색할 정점이 없으므로 탐색을 종료한다.
5->8->7
탐색의 순서는 5번 -> 4번 -> 1번 -> 6번 -> 3번 -> 9번 -> 8번 -> 7번 순이 된다.
코드로 작성해보면 아래와 같을 수 있으며, 결과또한 위의 탐색 순서와 동일하게 나오는 것을 볼 수 있다.
'PSNote > Algorithm' 카테고리의 다른 글
플로이드-와샬 알고리즘(Floyd-Warshall Algorithm) (0) | 2017.07.17 |
---|---|
벨만-포드 알고리즘(Bellman-Ford Algorithm) (0) | 2017.07.17 |
다익스트라 알고리즘(Dijkstra Algorithm) (0) | 2017.07.17 |
너비우선탐색(BFS ; Breadth First Search) (0) | 2017.07.17 |
위상정렬(Topological Sorting) (1) | 2017.07.17 |