Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 에라토스테네스의 체
- 다이나믹프로그래밍
- priority_queue
- Set
- 최소공배수
- N과M
- 배열
- 분할정복
- 백준
- int
- Sort
- 티스토리챌린지
- 유클리드호제법
- vector
- 오블완
- 백트래킹
- BFS
- DP
- 문자열
- 그래프
- DFS
- 우선순위큐
- map
- stoi
- 이분탐색
- 정렬
- C++
- 알고리즘
- 깊이우선탐색
- 프로그래머스
Archives
- Today
- Total
안녕 세상아,
[c++/그래프] BFS (너비 우선 탐색) 본문
너비 우선 탐색이란
1.현재 정점과 인접한 모든 정점 방문
2. 이들 정점과 인접한 모든 정점 찾아서 방문
그래프의 모든 정점을 탐색할 때까지 위의 과정 반복
시작 정점으로부터 가까운 정점 먼저 방문, 멀리 떨어져있는 정점 나중에 방문한다.
큐 이용하여 구현
DFS와 같은 수식
bool isVisited[N] = { };
-> 정점 방문 여부 검사
-> 정점 방문 여부를 검사하지 않으면 무한 루프에 빠질 수 있다.

<큐를 이용한 BFS 구하기>
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
vector<int> bfs(const vector<vector<int>>& adj_list, int s) {
vector<bool> visited(adj_list.size(), false);
vector<int> visit_order;
queue<int> q;
q.push(s);
while (!q.empty()) {
int v = q.front();
q.pop();
if (visited[v]) continue;
visited[v] = true;
visit_order.push_back(v);
for (int a : adj_list[v]) {
if (!visited[a])
q.push(a);
}
}
return visit_order;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector<vector<int>> adj_list = { {1,3,4},{0,2,4},{1,5},{0,4},{0,1,3},{2} };
bfs(adj_list, 0);
cout << endl;
} //0 1 3 4 2 5
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(int n, vector<vector<int>> computers) {
int answer = 0;
vector<bool> isVisited(n,false);
int cnt=0;
//전체 다 돌면서 네트워크 연결 됐나 확인
for(int i=0;i<n;i++){
//만약 이미 연결 되어있으면 pass
if(isVisited[i]) continue;
queue<int> q;
q.push(i);
while(!q.empty()){
int v=q.front();
q.pop();
if(isVisited[v]) continue;
isVisited[v]=true;
for(int j=0;j<n;j++){
if(computers[v][j]==1 && !isVisited[j])
q.push(j);
}
}
cnt++;
}
answer=cnt;
return answer;
}
'c++ 개념' 카테고리의 다른 글
[c++/알고리즘] 에라토스테네스의 체 (0) | 2023.05.10 |
---|---|
[c++/struct] 구조체(struct) 정렬하기 (vector 사용) (1) | 2023.05.08 |
[c++/자료형] 데이터 형식 범위, 개념 (0) | 2023.05.07 |
[c++/queue/heap] STL::priority_queue (우선순위 큐) (1) | 2023.05.05 |
[c++/그래프] DFS (깊이 우선 탐색) (0) | 2023.05.03 |