그래프 완전 탐색 기법 중 하나
그래프의 시작 노드에서 출발하여 탐색할 한 쪽 분기를 정하여 최대 깊이까지 탐색을 마친 후 다른 쪽 분기로 이동하여 다시 탐색을 수행하는 알고리즘
완전 탐색
그래프에 있는 모든 노드를 탐색하는 것
스택 오버플로
에 유의해야 한다.한 번 방문한 노드를 다시 방문하면 안된다. -> 탐색한 곳을 다시 탐색한다는 것은 비효율적이기 때문이다.
따라서 노드 방문 여부를 체크할 배열이 필요하다. 그래프는 인접 리스트로 표현한다.
자료구조: 인접 리스트
인접 리스트로 그래프 표현
1번에서 2번, 3번에 접근 가능
2번에서 5번, 6번에 접근 가능
3번에서 4번에 접근 가능
(이하 생략)
노드를 꺼내고, 꺼낸 노드의 인접 리스트를 확인한 후 인접 노드를 스택에 삽입한다.
이때 2와 3의 삽입 순서는 상관 없다. 2를 먼저 넣어도 되고 3을 먼저 넣어도 된다.
위 과정을 스택 자료구조에 값이 없을 때까지 반복한다.
시작점을 기준으로 DFS를 돌렸을 떄 더이상 갈 수 있는 곳이 없다는 것을 의미한다. DFS가 끝났다는 것을 의미한다.
이때 이미 다녀간 노드는 방문 배열을 바탕으로 재삽입하지 않는 것이 핵심이다.
인접 리스트를 확인한 후 인접 노드를 스택에 넣을 때 무조건적으로 넣는 것이 아니라 방문여부를 확인한 후 넣어야 한다. 이미 방문한 노드는 넣지 않고 스킵한다.
1의 인접노드 2, 3이 스택에 삽입
3이 꺼내지고 인접노드 4가 삽입
4가 꺼내지고 인접노드 6이 삽입
6이 꺼내지는데 인접노드가 없으므로 삽입 없음
2가 꺼내지고 인접노드 5가 삽입, 6은 이미 방문했기 때문에 스킵
5가 꺼내지고 DFS 종료