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
- stoi
- BFS
- map
- Sort
- 에라토스테네스의 체
- 오블완
- 티스토리챌린지
- DP
- 정렬
- C++
- 깊이우선탐색
- 그래프
- 다이나믹프로그래밍
- 유클리드호제법
- 프로그래머스
- 알고리즘
- 우선순위큐
- 백트래킹
- 분할정복
- 배열
- 이분탐색
- 백준
- int
- vector
- priority_queue
- Set
- 문자열
- N과M
- 최소공배수
- DFS
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 사용) (0) | 2023.05.08 |
[c++/자료형] 데이터 형식 범위, 개념 (0) | 2023.05.07 |
[c++/queue/heap] STL::priority_queue (우선순위 큐) (1) | 2023.05.05 |
[c++/그래프] DFS (깊이 우선 탐색) (0) | 2023.05.03 |