728x90
반응형
넓이 우선 탐색(BFS)은 그래프 탐색 알고리즘 중 하나로,
시작 정점에서부터 시작하여 인접한 정점들을 먼저 탐색한 후,
점차 멀리 있는 정점들을 탐색하는 방식입니다.
BFS는 주로 큐(Queue) 자료구조를 이용하여 구현되며,
그래프의 모든 정점을 방문하는 데 사용됩니다.
특징
- 시작 정점에서 가장 가까운 정점부터 탐색합니다.
- 최단 경로를 찾을 때 유용합니다.
- 큐(Queue) 자료구조를 사용하여 구현됩니다.
동작 원리
- 시작 정점을 큐에 삽입하고 방문 표시를 합니다.
- 큐에서 정점을 하나 꺼내어 해당 정점의 모든 인접 정점을 큐에 삽입하고,
방문 표시를 합니다. - 큐가 빌 때까지 2번 과정을 반복합니다.
#include <iostream>
#include <queue>
using namespace std;
const int MAX_VERTICES = 6;
void BFS(int start, int adjMatrix[MAX_VERTICES][MAX_VERTICES], int vertices) {
bool visited[MAX_VERTICES] = { false };
queue<int> q;
visited[start] = true;
q.push(start);
while (!q.empty()) {
int current = q.front();
q.pop();
cout << current << " ";
for (int i = 0; i < vertices; ++i) {
if (adjMatrix[current][i] && !visited[i]) {
visited[i] = true;
q.push(i);
}
}
}
}
int main() {
int vertices = MAX_VERTICES;
int adjMatrix[MAX_VERTICES][MAX_VERTICES] = {0};
// 그래프 초기화
adjMatrix[0][1] = 1;
adjMatrix[0][2] = 1;
adjMatrix[1][0] = 1;
adjMatrix[1][3] = 1;
adjMatrix[1][4] = 1;
adjMatrix[2][0] = 1;
adjMatrix[2][4] = 1;
adjMatrix[3][1] = 1;
adjMatrix[3][5] = 1;
adjMatrix[4][1] = 1;
adjMatrix[4][2] = 1;
adjMatrix[4][5] = 1;
adjMatrix[5][3] = 1;
adjMatrix[5][4] = 1;
// BFS 시작
cout << "BFS starting from vertex 0:" << endl;
BFS(0, adjMatrix, vertices);
return 0;
}
출력
BFS starting from vertex 0:
0 1 2 3 4 5
프로세스 설명
- 시작 정점 0을 큐에 넣고 방문 표시를 합니다.
- 큐에서 0을 꺼내고 인접한 정점 1과 2를 큐에 넣습니다.
- 큐에서 1을 꺼내고 인접한 정점 3과 4를 큐에 넣습니다.
- 큐에서 2를 꺼내지만 1과 4는 이미 방문했으므로 더 이상 진행하지 않습니다.
- 큐에서 3을 꺼내고 인접한 정점 5를 큐에 넣습니다.
- 큐에서 4를 꺼내지만 모든 인접한 정점이 이미 방문했으므로 더 이상 진행하지 않습니다.
- 큐에서 5를 꺼내지만 모든 인접한 정점이 이미 방문했으므로 더 이상 진행하지 않습니다.
제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀
728x90
반응형
'Application > 기초' 카테고리의 다른 글
[기초] C++ 보간 탐색 (Interpolation Search) (0) | 2024.05.22 |
---|---|
[기초] C++ 점프 탐색 (Jump Search) (0) | 2024.05.21 |
[기초] C++ 깊이 우선 탐색 (Depth-First Search, DFS) (0) | 2024.05.18 |
[기초] C++ 이진 탐색 (Binary Search) (0) | 2024.05.17 |
[기초] C++ 선형 탐색 (Linear Search) (0) | 2024.05.16 |