https://www.acmicpc.net/problem/11724
BFS를 순회하면서 연결 요소의 갯수가 있는지 찾는 문제다. 처음엔 문제를 잘못 읽고 연결된 그래프가 몇개인지만 세아려서 출력하면 되는줄 알았는데, 아무 간선도 가지지않는 정점도 연결 요소에 포함시켜 구현해야 했다.
방향성 없고 가중치 없는 그래프다 보니 그냥 바로 BFS로 감을 잡고 풀었고, 백준 2606번 바이러스 문제와 유사한 부분이 많은 문제였다.
#include <iostream>
#include <vector>
#include <queue>
#define MAX 1005
using namespace std;
vector<int> Graph[MAX];
int visited[MAX];
int cnt = 0;
bool flag;
void BFS(int start) {
queue<int> q;
q.push(start);
visited[start] = true;
while(!q.empty()) {
int n = q.front();
q.pop();
for (int i=0; i<Graph[n].size(); i++) {
int idx = Graph[n][i];
if (!visited[idx]) {
q.push(idx);
visited[idx] = true;
flag = true;
}
}
}
}
int main() {
int N,M;
cin >> N >> M;
for (int i=0; i<M; i++) {
int a,b;
cin >> a >> b;
Graph[a].push_back(b);
Graph[b].push_back(a);
}
for (int i=1; i<=N; i++) {
if (visited[i]) continue;
else {
BFS(i);
if (flag == true) cnt++;
}
if (flag == false) cnt++;
}
cout << cnt << '\n';
return 0;
}
728x90
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] #2178 미로 탐색 (0) | 2024.02.02 |
---|---|
[BOJ] #1012 유기농 배추 (0) | 2024.02.02 |
[BOJ] #2667 단지번호붙이기 (0) | 2024.01.10 |
[BOJ] #1697 숨바꼭질 (0) | 2024.01.10 |
[BOJ] #2606 바이러스 (0) | 2024.01.08 |