- Depth-First Search, Graph의 특정 Node에서 깊게 Node를 탐색하는 방식
- Stack 기반으로 동작하며 재귀함수를 이용해 구현할 수 있고, 찾고자 하는 데이터가 깊은 Node에 있다면 빠르게 찾을 수 있음
- 해가 없는 경로라면 깊이 빠질 수 있기에 임시 깊이를 설정해야 하며, 또한 이 경로가 최단 경로가 된다는 보장은 없음
- 사용처 : 미로 탐색, 사이클 탐지, 위상 정렬(Topological Sort), 연결 요소(Connected Component) 탐색 등
- 시간 복잡도 : O(V + E), V는 노드 수, E는 간선 수
- 공간 복잡도 : O(V)
function dfs(graph, current, visit) {
visited[current] = true
for (let i=0; i < graph[current].length; i++) {
const value = graph[current][i]
if (!visited[value]) {
dfs(graph, value, visit)
}
}
}
let visited = Array(8).fill(false)
let graph = [[], [2,3,8], [1,7], [1,4,5], [3,5], [7], [2,6,8], [1,7]]
dfs(graph, 0, visited)