하나의 노드로부터 모든 노드들을 한 번씩 방문하는 것
한 노드에서 옆에 있는 노드(인접한 노드)를 먼저 탐색하는 방법
레벨(깊이)을 한 단계씩 내려가면서 탐색
1. 시작 노드를 큐에 넣고 방문 처리
2. 큐에서 노드를 꺼내 방문하지 않은 인접 노드 정보를 모두 큐에 넣고 방문처리
3. 2번 과정을 더 이상 수행할 수 없을 때까지 반복
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
void bfs(vector<vector<int>>& graph, int start) {
vector<bool> visited(graph.size(), false);
queue<int> queue;
vector<int> visitedOrder; // 방문한 노드를 저장하는 배열
queue.push(start);
visited[start] = true;
while (!queue.empty()) {
int node = queue.front();
queue.pop();
visitedOrder.push_back(node); // 방문한 노드를 저장
// graph[node]에 연결된 모든 노드를 순회
for (int adj : graph[node]) {
if (!visited[adj]) {
visited[adj] = true;
queue.push(adj);
}
}
}
// 방문한 노드 출력
cout << "방문한 노드 순서: ";
for (int node : visitedOrder) {
cout << node << " ";
}
cout << endl;
}
int main() {
// 예시 그래프
vector<vector<int>> graph = {
{1, 2}, // 0과 연결된 노드
{3, 4}, // 1과 연결된 노드
{5, 6}, // 2와 연결된 노드
{7}, // 3과 연결된 노드
{}, // 4와 연결된 노드
{}, // 5와 연결된 노드
{8, 9}, // 6과 연결된 노드
{}, // 7과 연결된 노드
{10}, // 8과 연결된 노드
{}, // 9와 연결된 노드
{} // 10과 연결된 노드
};
bfs(graph, 0); // 0번 노드부터 BFS 시작
return 0;
}