728x90
BFS (너비 우선 탐색)
BFS는 탐색을 할 때 너비를 우선으로 수행하는 그래프 탐색 알고리즘이다.
너비 우선 탐색은 최단 경로를 찾아야 할 때 많이 사용한다.
재귀 함수로 구현하지 않고 큐(Queue)로 주로 구현한다.
BFS를 그래프를 저장 할 때는 인접 행렬과 인접 리스트로 구현하는 방법이 있는데 인접 행렬은 시간 복잡도가 O(V^2) (V는 정점의 수), 인접 리스트는 O(V + E) (V는 정점, E는 간선) 이라 인접 리스트가 더 빠르기 때문에 주로 인접 리스트로 저장한다.
C++ BFS 구현
bool visited[101] = {};
void bfs(vector<int> graph[], int start) {
queue<int> q;
q.push(start);
visited[start] = true;
while (!q.empty()) {
int x = q.front();
q.pop();
cout << x << " ";
for (int i = 0; i < graph[x].size(); i++) {
int y = graph[x][i];
if (!visited[y]) {
q.push(y);
visited[y] = true;
}
}
}
}
728x90
'알고리즘 > 이론' 카테고리의 다른 글
[Java] 다익스트라 알고리즘(최단거리 알고리즘) (0) | 2022.04.10 |
---|---|
[자료구조] 힙(Heap), 최대 힙 (C++) (0) | 2021.08.17 |
[이진 탐색] Lower Bound, Upper Bound (0) | 2021.08.13 |
분할 정복(Divide and Conquer) (0) | 2021.08.10 |
DFS [깊이 우선 탐색] 란? (0) | 2021.07.28 |