IT/알고리즘

[python/자료구조] DFS 와 BFS

유달잇 2021. 2. 12. 21:02
728x90

 

1. DFS ( Depth First Search ) _ 깊이 우선 탐색이란?


하나의 경우의 수에 대하여 모든 경우의 수를 조사하면서 해를 찾는 과정으로 깊은 부분을 우선적으로 탐색하는 알고리즘이다. 스택(후입선출)의 자료구조 또는 재귀함수를 활용한다.

위 그래프의 경우 1 -> 2 -> 7 -> 6 -> 8 -> 3 -> 4 -> 5 순서대로 탐색하며 코드로 구현하면 다음과 같다.

  
  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,5], [7], [2,6,8], [1,7] ]

  visited = [False] * 9

  dfs(graph, 1, visited)
 

< 실행 결과 >

1 2 7 6 8 3 4 5

 

2. BFS ( Breadth First Search ) _ 너비 우선 탐색이란?


하나의 경우의 수에 대한 다음 단계의 모든 경우의 수를 조사하면서 해를 찾는 과정으로 가까운 노드부터 우선적으로 탐색하는 알고리즘이다. 큐(선입선출)의 자료구조를 활용한다.

위 그래프의 경우 1 -> 2 -> 3 -> 8 -> 7 -> 4 -> 5 -> 6 순서대로 탐색하며 코드로 구현하면 다음과 같다.

  from collections import deque

  def bfs(graph, start, visited):
      queue = deque( [start] )  # deque 라이브러리 사용
      visited[start] = True  # 노드 방문 처리
      while queue :
          v = queue.popleft()  # 원소를 뽑아 출력
          print( v, end=' ' )
          for i in graph[v]:  # 방문하지 않은 진접한 원소들을 큐에 삽입
              if not visited[i]:
                   queue.append(i)
                   visited[i] = True
                   
  graph = [ [ ], [2,3,8], [1,7], [1,4,5], [3, 5], [3,5], [7], [2,6,8], [1,7] ]

  visited = [False] * 9

  dfs(graph, 1, visited)
                       

< 실행 결과 >

1 2 3 8 7 4 5 6

728x90
댓글
250x250
최근에 올라온 글
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Total
Today
Yesterday