ACMICPC.NET

DFS - Depth First Search(깊이우선탐색)

META_BS 2017. 5. 20. 14:36

트리 그래프에서 한 루트로 탐색하다가 특정 상황에서 최대한 깊숙히 들어가서 확인한 뒤 다시 돌아가 다른 루트로 탐색하는 방식이다. 대표적으로 백트래킹에 사용한다. 일반적으로 재귀호출을 사용하여 구현하지만, 단순한 스택 배열로 구현하기도 한다. 구조상 스택 오버플로우를 유의해야 한다. 그래프가 너무 깊거나 문제상황이 큰 범위로 주어진 경우 무한루프를 반복하거나 시간이 엄청나게 오래 걸리는 경우가 많다.

갈림길이 나타날 때마다 '다른 길이 있다'는 정보만 기록하면서 자신이 지나간 길을 지워나간다. 그러다 막다른 곳에 도달하면 직전 갈림길까지 돌아가면서 '이 길은 아님'이라는 표식을 남긴다. 그렇게 갈림길을 순차적으로 탐색해 나가다 목적지를 발견하면 그대로 해답을 내고 종료하는방식이다. 다른 길이 있다라는것을 표현하기위해 또 다른 배열을 만들어야한다. 

단순한 검색 속도는 BFS에 비해서 느린 편이지만 단지 현 경로상의 노드들만을 기억하면 되므로 저장공간의 수요가 비교적 적고, 목표노드가 깊은 단계에 있을 경우 해를 더 빨리 구할 수 있다.