-
너비우선탐색(BFS, Breadh-Frist Search)Algorithm/Algorithm_Theory 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
'Algorithm > Algorithm_Theory' 카테고리의 다른 글
그래프(Graph) (0) 2022.11.30 깊이우선탐색(DFS, Depth-First Search) (0) 2022.11.23 스택(Stack) (0) 2022.11.14 큐(Queue) (1) 2022.11.13 그리디알고리즘(Greedy Algorithm) (0) 2022.10.22