반응형
#include < iostream >
#include < vector >
#include < queue >
using namespace std;
bool check[1001];
vector a[1001];
void dfs(int v){
check[v] = true;
for(int i=0;i<a[v].size();i++){
int node = a[v][i];
if(check[node] == false){
check[node] = true;
dfs(node);
}
}
}
void bfs(int v){
queue q;
q.push(v);
check[v] = true;
while(!q.empty()){
int node = q.front();
q.pop();
for(int i=0;i<a[node].size();i++){
int node2 = a[node][i];
if(check[node2] == false){
check[node2] = true;
q.push(node2);
}
}
}
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++){
int x,y;
cin>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
int cnt=0;
for(int i=1;i<=n;i++){
if(check[i] == false){
cnt++;
//dfs(i);
bfs(i);
}
}
cout<<cnt;
return 0;
}
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
반응형
'개발자 > 알고리즘' 카테고리의 다른 글
[BOJ] 4963번 섬의 개수 (0) | 2019.09.22 |
---|---|
[BOJ] 2667번 단지번호붙이기 (0) | 2019.09.22 |
[BOJ] 1260번 BFS와 DFS (0) | 2019.09.21 |
[BOJ] 15654번 N과 M(5) - 빠른 입출력 (0) | 2019.09.19 |
[BOJ] 14501번 퇴사 (0) | 2019.09.18 |