Skip to content

Latest commit

 

History

History
40 lines (32 loc) · 1.47 KB

File metadata and controls

40 lines (32 loc) · 1.47 KB

DFS(Depth-First Search) 란?

image

DFS는 깊이 우선 탐색이라고도 부르며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘

동작 과정

  1. 탐색 시작 노드를 스택에 삽입하고 방문 처리 한다.

  2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다.

  3. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다.

def dfs(graph, v, visited):
  visited[v] = True # 현재 노드 방문 처리
  print(v, end=' ')
  # 해당 원소와 연결된 다른 노드 재귀적 방문
  for i in graph[v]:
    if not visited[i]:
      dfs(graph, i, visited)
      
graph = [
  [],
  [2, 3, 8],
  [1,7],
  [1, 4, 5],
  [3, 5],
  [3, 4],
  [7],
  [2, 6, 8],
  [1,7]
]

visited = [False] * 9
bfs(graph, 1, visited) # 1 2 7 6 8 3 4 5

bfs를 코드로 구현하면 데이터를 담기 위한 queue를 구현하고, 큐가 빌 때까지 계속 반복하면서 연결된 원소들을 차례대로 큐에 삽입하는 형태이다.
DFS/BFS는 1차원 배열이나 2차원 배열 문제에서 많이 사용된다.
각 배열의 값들이 좌표라고 생각하고, 좌표를 상하좌우로만 이동하면서 탐색을 하는 문제들이 많이 출제된다.