본문 바로가기

알고리즘

DFS(깊이 우선 탐색)

728x90

1. DFS(깊이 우선 탐색)이란?

(1) 개념과 특징

  • 그래프 혹은 트리에서 모든 노드를 한 번씩 탐색하기 위한 기본적인 방법
  • 완전 탐색을 수행하기 위해 사용할 수 있는 가장 간단한 방법 중 하나
  • 스택(stack) 자료 구조를 사용한다

(2) 동작 방식

  • 시작 노드를 스택에 넣고 방문 처리함
  • 스택에 마지막으로 들어온 노드에 방문하지 않은 인접 노드가 있는 지 확인한다.
  • 있다면 방문하지 않은 인접 노드를 스택에 삽입하고 방문 처리한다.
  • 없다면 현재 노드(스택에 마지막으로 들어온 노드)를 스택에서 추출한다.
  • 이 과정을 더이상 반복할 수 없을 때 까지 반복한다.

(3) 구현 특징

  • 완전 탐색을 목적으로 하는 경우, 탐색 속도가 BFS보다 느린 경향이 있다.
  • 구현이 편리함

(4) 사용 예시

  • 트리의 순회, 점화식 구현 등
  • 트리에서 최단 거리 탐색

(5) 소스 코드

function DFS(graph, v, visited){
  //현재 노드를 방문 처리
  visited[v]=true;
  console.log(v);
  //현재 노드와 연결된 다른 노드들을 재귀적으로 방문
  for(let i of graph[v]){
    if(!visited[i]){
      DFS(graph,i,visited)
    }
  }
}


let graph=[[],[2,3,4],[1],[1,5,6],[1,7],[3,8],[3],[4],[5]]  
let visited=Array(9).fill(false)

DFS(graph, 1, visited)

 

728x90

'알고리즘' 카테고리의 다른 글

2018 KAKAO BLIND RECRUITMENT>[3차]n진수 게임  (0) 2023.07.11
DFS 문제풀이  (1) 2023.06.08
투포인터 슬라이더 문제 풀이(1)  (0) 2023.05.07
투 포인터 알고리즘  (0) 2023.05.07
이진탐색 문제 풀이1  (0) 2023.05.01