Study hard
(c++)백준 11724번: 연결 요소의 개수 본문
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를 돌린다.
bfs를 돌린 횟수가 연결요소의 개수이다.
#include <iostream>
#include <queue>
using namespace std;
int N, M;
int Graph[1001][1001] = { 0, };//정점 연결되어 있으면 1
bool check[1001] = { false, };
void input() {
cin >> N >> M;
for (int i = 0; i < M; i++) {
int u, v;
cin >> u >> v;
Graph[u][v] = 1;
Graph[v][u] = 1;
}
}
void bfs(int start) {
queue<int>q;
q.push(start);
check[start] = true;
while (!q.empty()) {
int cur = q.front();
q.pop();
for (int i = 1; i <= N; i++) {
if (Graph[cur][i] == 1 && check[i] == false) {
check[i] = true;
q.push(i);
}
}
}
}
void solution() {
input();
int cnt = 0;//연결 요소 개수
for (int i = 1; i <= N; i++) {
if (check[i] == false) {
bfs(i);
cnt++;
}
}
cout << cnt << endl;
}
int main() {
solution();
return 0;
}
'백준 > bfs, dfs' 카테고리의 다른 글
(c++) 백준 9466번: 텀 프로젝트 (0) | 2020.06.19 |
---|---|
(c++)백준 2331번: 반복수열 (0) | 2020.06.19 |
(c++)백준 10451번: 순열 사이클 (0) | 2020.06.19 |
(c++)백준 1707번: 이분 그래프 (0) | 2020.06.19 |
(c++)백준 1260번: DFS와 BFS (0) | 2020.06.18 |