이번 문제는 11724번 연결 요소의 개수다.

문제 개요
그래프 이론에서 Connected Component란, 서로 연결되어 있는 정점들의 집합을 의미한다
백준 11724번에서는 주어진 무방향 그래프의 연결 요소 개수를 구해야 함
문제 조건
- 입력
- 첫 줄에 정점의 개수 N, 간선의 개수 M
- 다음 M개의 줄에는 간선 정보 u v (u와 v는 연결된 정점)
- 정점 번호는 1부터 N까지
- 출력
- 그래프의 연결 요소 개수
접근법
- 그래프 저장 방식
- vector<vector<int>>를 이용한 인접 리스트 방식
- 방문 체크
- vector<bool>로 방문한 정점을 기록
- DFS 수행
- 방문하지 않은 노드에서 DFS 시작 → 해당 노드와 연결된 모든 노드 방문
- DFS가 한 번 완료될 때마다 연결 요소 개수 +1
- 결과 출력
작성코드
#include <bits/stdc++.h>
using namespace std;
void DFS (int i,vector<vector<int>> & vertex,vector<bool> & visited,int& result);
int main(void){
ios::sync_with_stdio(false); cin.tie(0);
int N,M;
cin >> N >> M;
vector<vector<int>> vertex(N+1);
for(int i = 1; i <= M; i++){
int a,b;
cin >> a >> b;
vertex[a].push_back(b);
vertex[b].push_back(a);
}
for(int i = 1; i <= N; i++){
sort(vertex[i].begin(),vertex[i].end());
}
vector<bool> visited(N+1,false);
int result = 0;
for(int i = 1; i <= N; i++){
if(!visited[i]){
DFS(i,vertex,visited,result);
result += 1;
}
}
cout << result;
}
void DFS (int i,vector<vector<int>> & vertex,vector<bool> & visited,int& result){
visited[i] = true;
for(int next : vertex[i]){
if(!visited[next]){
DFS(next,vertex,visited,result);
}
}
}'매일 BOJ' 카테고리의 다른 글
| (매일 BOJ) C++ 2468번 안전 영역 (2) | 2025.08.11 |
|---|---|
| (매일 BOJ) C++ 2667번 단지번호붙이기 (2) | 2025.08.10 |
| (매일 BOJ) C++ 4963번 섬의 개수 (11) | 2025.08.06 |
| (매일 BOJ) C++ 2644번 촌수계산 (2) | 2025.08.05 |
| (매일 BOJ) C++ 2606번 바이러스 (0) | 2025.08.05 |