반응형
바이러스 문제와 같은 방식으로 DFS를 쓰면 쉽게 풀리는 문제이다.
(특이 케이스만 아니면 BFS보다는 DFS가 너무 편하다..)
#include <stdio.h>
#include <stdlib.h>
int Graph[1001][1001];
int visited[1001];
int N,M,cnt = 0;
void dfs(int i){
visited[i]=1;
for(int j=1; j<=N; j++){
if(!visited[j] && Graph[i][j]){
visited[j]=1;
dfs(j);
}
}
}
int main(){
scanf("%d %d",&N,&M);int p,q;
for(int i=0; i<M; i++){
scanf("%d %d",&p,&q);
Graph[p][q]++; Graph[q][p]++;
}
for(int i=1; i<N+1; i++){
visited[i]=0;
}
for(int i =1; i<=N; i++){
if (!visited[i]) {
dfs(i); cnt++;
}
}
printf("%d",cnt);
}
'PS' 카테고리의 다른 글
[백준/11053/C] 가장 긴 증가하는 부분수열 (0) | 2025.05.30 |
---|---|
[백준/18870/C] 좌표압축 (0) | 2025.05.28 |
[백준/2805/C] 나무 자르기 (0) | 2025.05.27 |
[백준/2630/C] 색종이 만들기 (0) | 2025.05.27 |
[백준/1927/C] 최소힙 (0) | 2025.05.27 |