#include <iostream>
#include <vector>
using namespace std;
vector<int> v[1001];
int visited[1001];
void DFS(int a);
int main(void)
{
int a=0;
int b=0;
cin>>a>>b;
for(int i=0; i<b; i++)
{
int num1=0;
int num2=0;
cin>>num1>>num2;
v[num1].push_back(num2);
v[num2].push_back(num1);
}
int count=0;
for(int i=1; i<=a; i++)
{
if(visited[i]==0)
{
visited[i]=1;
DFS(i);
count++;
}
}
cout<<count;
return 0;
}
void DFS(int a)
{
for(int i=0; i<v[a].size(); i++)
{
if(visited[v[a][i]]==0)
{
visited[v[a][i]]=1;
DFS(v[a][i]);
}
}
}
이 문제는 처음에 연결 요소의 개수? 이게 무슨말인지 싶었다.
이거만 이해하면 풀기는 어렵지 않다.
나는 이 문제를 DFS로 풀었다.
처음에 1부터 시작해서 깊게 탐색을 한다. 1과 연결된 부분은 모두 방문처리하고, 방문처리가 된 정점은 다시 방문하지 않는다.
for(int i=1; i<=a; i++)
{
if(visited[i]==0)
{
visited[i]=1;
DFS(i);
count++;
}
}
이 부분에서 이미 방문된 정점이면 방문하지 않는다. 이게 연결 요소의 개수를 찾는 핵심이다.
'백준 > 탐색' 카테고리의 다른 글
[백준] C++ 2468(안전 영역) (0) | 2024.07.02 |
---|---|
[백준] C++ 4963번(섬의 개수) (2) | 2024.07.02 |
[백준]C++ 10026(적록색맹) (0) | 2024.06.29 |
C++ 11403(경로 찾기) (0) | 2024.06.28 |
[백준]C++ 14052번(연구소) (0) | 2024.06.27 |