BFS: 너비 우선 탐색
- 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘
- 큐 자료구조를 이용
- 탐색 시작 노드를 큐에 삽입하고 방문처리
- 큐에서 노드를 꺼낸 뒤 해당 노드의 인접 노드중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문처리
- 더 이상 2번의 과정을 수행할 수 없을 때까지 반복
- BFS 동작 예시
1부터 시작하면 1이랑 거리가 가까운 2, 3, 8이 먼저 탐색되고, 그다음 2랑 가까운 7 ••• 마지막으로 거리가 제일 먼 6이 탐색됨
- BFS 코드 예제
from collections import deque
#BFS 메서드 정의
def bfs(graph, start, visited):
#큐(Queue) 구현을 위해 deque 라이브러리 사용
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
#각 노드가 연결된 정보를 표현(2차원 리스트)
graph = [
[],
[2,3,8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
]
#각 노드가 방문된 정보를 표현(1차원 리스트)
visited = [False] * 9
#정의된 BFS 함수 호출
bfs(graph, 1, visited)
#실행결과
#1 2 3 8 7 4 5 6
출처: 이코테 나동빈님 강의
'개발 공부 > 알고리즘' 카테고리의 다른 글
정렬 알고리즘 - 선택정렬, 삽입정렬, 퀵정렬, 계수정렬 (0) | 2023.01.30 |
---|---|
이코테 인구이동(BFS) (0) | 2023.01.26 |
DFS(Depth-First Search) : 깊이 우선 탐색 (0) | 2023.01.18 |
스택 자료구조, 큐 자료구조, 재귀함수 (0) | 2023.01.17 |
이코테(구현) - 자물쇠와 열쇠 (0) | 2023.01.16 |