Algorithm/Algorithm_Theory
너비우선탐색(BFS, Breadh-Frist Search)
yunajoe
2022. 11. 23. 23:37
BFS(Breadth-First Search)
- 너비 우선 탐색이라고도 불리며 그래프에서 시작 노드에 인접한 노드부터 탐색하는 알고리즘
- 선입선출(First-in First-out) 방식의 큐(Queue) 자료를 이용

(1) 시작 노드인 노드 1을 큐에 삽입하고 1를 방문 처리

(2) 큐에서 노드 1을 꺼내고 노드 1과 인접한 노드 2, 3을 큐에 삽입하고 2,3 방문 처리

(3) 큐에서 노드 2를 꺼내고 노드 2와 인접한 노드 8을 큐에 삽입하고 8를 방문 처리

(4) 큐에서 노드 3을 꺼내고 노드 3과 인접한 노드 4, 5를 큐에 삽입하고 4,5을 방문 처리

(5) 큐에서 노드 8을 꺼내고 노드 8과 인접한 노드 6, 7을 큐에 삽입하고 6,7를 방문 처리

(6) 그래프 내 노드에서 방문하지 않은 노드가 없으므로 큐에서 모든 노드를 차례대로 꺼냅니다

BFS의 구현 순서, 즉 큐에서 꺼낸 순서!
1 -> 2 -> 3 -> 8 -> 4 -> 5 -> 6 -> 7
# deque 라이브러리 불러오기
from collections import deque
# BFS 메서드 정의
def bfs (graph, node, visited):
# 큐 구현을 위한 deque 라이브러리 활용
queue = deque([node])
# 현재 노드를 방문 처리
visited[node] = 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],
[1, 8],
[1, 4, 5],
[3, 5],
[3, 4],
[7, 8],
[6, 8],
[2, 6, 7]
]
# 노드별로 방문 정보를 리스트로 표현
visited = [False] * 9
# 정의한 BFS 메서드 호출(노드 1을 탐색 시작 노드로 설정)
bfs(graph, 1, visited)
============================================================================================
출처
1. https://heytech.tistory.com/56
[Python] BFS 알고리즘 개념 및 실습
본 포스팅에서는 너비 우선 탐색이라고 불리는 BFS(Breadth-First Search)에 대해 알아봅니다. 📚 목차 1. BFS 알고리즘이란? 2. BFS 알고리즘 동작 과정 3. BFS 파이썬 구현 3.1. 소스코드 설명 3.2. 전체 소스
heytech.tistory.com