728x90
1. BFS란?
- BFS 는 너비우선탐색을 말합니다.
- 루트 노드에서 시작하여 인접한 노드를 탐색하는 방법입니다.
Q. 너비우선 탐색을 하면 순서가 어떻게 될까요?
A. 0 - 1 - 2 - 3 - 4 - 5 -6
1) 특징
- 두 노드사이의 최단 경로를 찾을 때, 임의의 경로를 찾을 때 사용
- 코드가 DFS보단 복잡하지만 속도는 더 빠르다
2) 알고리즘 구현 방법
BFS의 결과 :
1 - 2 - 6 - 3 - 4 -5
- 큐를 이용하여 구현함
void bfs(int st) {
q.push(st);
visited1[st] = 1;
while (!q.empty()) {
int now = q.front();
q.pop();
printf("%d ", now);
for (int i = 0; i < adj[now].size(); i++) {
int next = adj[now][i];
if (!visited1[next]) {
q.push(next);
visited1[next] = 1;
}
}
}
}
- 과정
- bfs에 1이 들어가면 큐에 1이 푸쉬됨.
- visited배열에서 1은 방문함을 표시
- 큐가 비어있지 않으므로 while문안에 들어감
- 큐에 첫번째에 있는 노드(1)가 now가 되고
- 1은 큐에서 삭제됨
- 1의 인접노드의 개수만큼 for문 반복
- next = 다음 방문할 노드
- 만약에 방문하지 않은 노드라면 q에 푸쉬한다.
- 그리고 방문했다고 표시
.. 이하생략
728x90
'Algorithm > Study' 카테고리의 다른 글
[이것이 취업을 위한 코딩 테스트다] Chapter 03 - 그리디(Greedy) (0) | 2022.03.08 |
---|---|
[Algorithm] 유니온 파인드(Union-Find) 개념, 코드(C++) (2) | 2021.05.20 |
[Algorithm] DFS 정리 (0) | 2021.03.14 |
[Algorithm] 완전탐색 (0) | 2021.02.26 |
[Algorithm] 시간복잡도 이해하기 (0) | 2021.02.23 |