https://www.acmicpc.net/problem/11724
11724번: 연결 요소의 개수
첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주
www.acmicpc.net
기본적인 BFS / DFS 문제이다.
BFS를 이용해 접근했다.
모든 노드에 대해 BFS를 시도하면서 이미 방문한 노드인 경우 건너뛰는 방식이다.
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int n, m;
int count = 0;
vector<int> a[1001];
int v[1001] = {
0,
};
void bfs(int start){
if(v[start] == 1)
return;
queue<int> q;
q.push(start);
v[start] = 1;
::count++;
while(!q.empty()){
int x = q.front();
q.pop();
for (int i = 0; i < a[x].size(); i++){
int y = a[x][i];
if(v[y] == 0){
v[y] = 1;
q.push(y);
}
}
}
}
int main(){
cin >> n >> m;
for (int x,y,i = 0; i < m; i++){
cin >> x >> y;
a[x].push_back(y);
a[y].push_back(x);
}
for (int i = 1; i <= n; i++){
bfs(i);
}
cout << ::count << "\n";
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준] 1780번 종이의 개수 c++ (0) | 2022.11.27 |
---|---|
[백준] 1676번 팩토리얼 0의 개수 c++ (0) | 2022.11.27 |
[백준] 11723 집합 c++ (0) | 2022.11.25 |
[백준] 7662번 이중 우선순위 큐 c++ (0) | 2022.11.25 |
[백준] 2630번 색종이 만들기 c++ (0) | 2022.11.23 |