728x90
반응형
너비 우선 탐색(Breadth-First Search)
- 그래프 탐색 방법 중 한 가지 종류
"시작 정점에 인접한 노드를 중심으로 탐색함"

아이디어
- 시작점에 연결된 Vertex 찾기
- 찾은 Vertex를 Queue에 저장
- Queue의 가장 먼저 것 뽑아서 반복
[그래프 예시]

파이썬으로 구현한 BFS 알고리즘
from collections import deque # BFS 함수 정의 def bfs(graph, start, visited): # 큐(Queue) 구현을 위해 deque 라이브러리 사용 - 젤 처음에는 큐에 1만 들어가있음 queue = deque([start]) # 현재 노드를 방문 처리 visited[start] = True # 큐가 빌 때까지 반복 while queue: # 큐에서 하나의 원소를 뽑아 출력 - 제일 왼쪽 끝 요소를 가져오면서 삭제하기 v = queue.popleft() print(v, end=' ') # 먼저 방문하는 순서(실행 결과) 출력 # 해당 원소 v와 연결된, 아직 방문하지 않은 원소들을 큐에 삽입 - ex) for i in graph[v]: if not visited[i]: # 만약 visitied[i] 요소가 False라면 queue.append(i) # 추가하고 visited[i] = True # True로 바꿔주기 # 각 노드가 연결된 정보를 리스트 자료형으로 표현(2차원 리스트) graph = [ [], # 처음 v가 1이기 때문에 빈 리스트 하나 넣어줌 [2, 3, 8], [1, 7], [1, 4, 5], [3, 5], [3, 4], [7], [2, 6, 8], [1, 7] ] # 각 노드가 방문된 정보를 리스트 자료형으로 표현(1차원 리스트) - 0부터 시작하기 때문에 9개 곱하기 visited = [False] * 9 # 정의된 BFS 함수 호출 bfs(graph, 1, visited)
728x90
반응형
'Algorithm > Brute-force (완전 탐색 기법)' 카테고리의 다른 글
깊이 우선 탐색(Depth-First Search) : DFS (0) | 2022.05.30 |
---|---|
백 트래킹(Back Tracking) 알고리즘 (0) | 2022.01.13 |