[알고리즘 개념] BFS vs DFS

developer_jennifer·2023년 4월 21일
0

알고리즘

목록 보기
3/30

DFS(깊이 우선 탐색)

  • 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘
  1. 탐색 시작 노드를 스택에 삽입하고 방문 처리
  2. 스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문 처리
    이때 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼냄
  3. 더 이상 2번의 과정을 수행할 수 없을 때까지 반복
  4. 결국 스택이 빈 스택이 되었을 때 종료됨
from collections import deque

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
dfs(graph,1,visited)

BFS(너비 우선 탐색)

  • 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘
  1. 탐색 시작 노드를 큐에 삽입하고 방문 처리함
  2. 큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문 처리
  3. 더 이상 2번의 과정을 수행할 수 없을 때까지 반복
from collections import deque

def bfs(graph,start,visited):
    queue = deque([start])
    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,4],
    [7],
    [2,6,8],
    [1,7]
]

visited = [False] * 9

bfs(graph,1,visited)

Ref )
https://velog.io/@vagabondms/DFS-vs-BFS
이것이 코딩테스트다 파이썬 편

profile
블로그 이전합니다 -> https://heekyoung2000.tistory.com/

0개의 댓글

관련 채용 정보