반응형
BFS란?
BFS는 너비 우선 탐색이라고도 부르며, 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘
BFS는 큐 자료구조를 이용
동작과정
1. 탐색 시작 노드를 큐에 삽입하고 방문 처리
2. 큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문 처리
3. 더 이상 2번의 과정을 수행할 수 없을 때까지 반복
동작 예시
시작 노드를 1로 정하고 근접한 노드를 찾는다. 이때 방문 기준은 번호가 낮은 인접 노드부터이다.
이때 1에 따라서 2,3,8 이 생긴다. 이걸 큐에 넣고 방문 처리한다.
그다음은 인접했던 값 중에 제일 작았던 2에 대해 인접 노드를 추가해준다. 그전에 있던 1은 사라지고 2와 인접한 노드를 추가해준다. 그래서 3,8,7 이 남는다.
이런 식으로 모든 노드에 대해 탐색을 한다.
이 과정을 반복하면 탐색 순서는 위와 같이 된다.
BFS 소스 코드 예제
from collections import deque
#BFS 메서드 정의
def bfs(graph,start,visited):
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
www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC
이 자료는 동빈 나 님의 이코 테 유튜브 영상을 보고 정리한 자료입니다.
출처: https://continuous-development.tistory.com/170?category=736684 [나무늘보의 개발 블로그]
반응형
'Algorithm' 카테고리의 다른 글
[Algorithm] 21강 : 선택 정렬의 정의와 구현코드 (0) | 2020.11.05 |
---|---|
[Algorithm] 20강 : DFS & BFS 기초 문제 풀이 (1) | 2020.11.04 |
[Algorithm] 18강 : DFS(깊이 우선 탐색) 알고리즘 정의와 예제 (0) | 2020.11.02 |
[Algorithm] 17강 : 재귀함수의 정의와 예제 (0) | 2020.10.30 |
[Algorithm] 16강 : 스택과 큐 자료구조 (0) | 2020.10.29 |