취준이랄까../코테

BFS

넹넹선생님 2024. 4. 15. 11:37
728x90
반응형

BFS는 시작 노드로부터 시작하여 인접한 모든 노드를 먼저 탐색하는 방식입니다. 이는 큐(queue) 자료구조를 사용하여 구현됩니다.

 

1. 시작 노드를 큐에 넣고 방문 표시를 합니다.
3. 큐가 빌 때까지 다음을 반복합니다:
   - 큐에서 하나의 노드를 꺼냅니다.
   - 해당 노드의 인접한 모든 미방문 노드들을 큐에 넣고 방문 표시를 합니다.

 

실전)

from collections import deque

# 그래프 정의
graph = {
    'A': ['B', 'C'],
    'B': ['D', 'E'],
    'C': [],
    'D': [],
    'E': []
}

# 시작 노드 설정
start_node = 'A'

def bfs(graph, start):
    visited = set()
    queue = deque([start])
    visited.add(start)

    while queue:
        current_node = queue.popleft()
        print(current_node)  # 현재 노드 방문

        for neighbor in graph[current_node]:
            if neighbor not in visited:
                queue.append(neighbor)
                visited.add(neighbor)


print("BFS 탐색 결과:")
bfs(graph, start_node)

 

 

- BFS vs. DFS

BFS와 DFS는 그래프 탐색 알고리즘으로, 각각의 특성에 따라 다른 상황에 사용됩니다.

1. 너비 우선 탐색 (BFS):
- 가까운 노드부터 탐색해야 할 때 사용합니다. 즉, 시작 노드에서 목표 노드까지의 최단 경로를 찾을 때 유용합니다.
- 최단 경로 문제최소 비용 문제에서 많이 사용됩니다.
- 레벨 단위로 탐색하기 때문에 깊이에 제한이 있는 경우에 유용합니다.

 

2. 깊이 우선 탐색 (DFS):
- 그래프에서 깊이를 우선적으로 탐색해야 할 때 사용합니다.
- 무한 그래프나 깊이가 매우 깊은 그래프를 탐색할 때 적합합니다.
- 모든 경로를 탐색하고자 할 때 사용할 수 있습니다.
- 예를 들어, 미로 찾기나 그래프에서 사이클을 찾는 문제에 유용합니다.

728x90
반응형

'취준이랄까.. > 코테' 카테고리의 다른 글

백준: 기적의 매매법, 파이썬  (0) 2024.04.19
정렬(선택 정렬, 삽입 정렬)  (0) 2024.04.15
DFS  (0) 2024.04.15
[dfs, bfs]  (0) 2024.04.15
재귀함수. 마스터  (1) 2024.03.12