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
- 배열
- 오블완
- 유클리드호제법
- 분할정복
- 문자열
- DFS
- 다이나믹프로그래밍
- N과M
- 최소공배수
- 정렬
- int
- priority_queue
- map
- vector
- Sort
- 그래프
- 백트래킹
- Set
- stoi
- 이분탐색
- DP
- 우선순위큐
- 티스토리챌린지
- 에라토스테네스의 체
- BFS
- 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 |