본문 바로가기

Algorithm/알고리즘

[Python] DFS, BFS

def dfs(graph, v, visited):  # graph: 각 노드가 연결된 정보
    visited[v] = True  # 현재 노드 방문 처리
    print(v, end=' ')
    for i in graph[v]:  # 현재 노드(graph[v]와 연결된 노드를 재귀적으로 방문
        if not visited[i]:
            dfs(graph, i, visited)
            
# 참고로, visited의 초기값은 visited=[False]*(n+1)로 초기화를 해주는데, 
# n이 아니라 (n+1)인 이유는 0번 인덱스는 비워두고 사용하지 않기 때문이다.

 

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

# bfs는 인접 노드들을 "한 번에" 큐에 넣는 특징이 있음
# bfs는 간선의 비중이 모두 동일하다는 가정에서 최단 거리 문제에 자주 사용

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

[Python] set 연산  (0) 2023.01.07
[Python] 문자열에서 find 함수  (0) 2023.01.01
[백준 1929번] set 정렬  (0) 2022.11.27
피보나치 수열의 항 구하기 (피사노 주기)  (0) 2021.03.26
차대값과 차소값 찾기  (0) 2021.03.26