본문 바로가기

Algorithm

백준 11724번 연결 요소의 개수

반응형

문제

방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.

출력

첫째 줄에 연결 요소의 개수를 출력한다.

 

 

 

사이클을 찾는 방법과 같은 방식이지만 한 정점에서 여러 정점에 연결된 간선이 존재하므로 벡터를 사용해야함. 벡터 배열에서 push하고 2차원 배열과 같이 쓰지만 벡터만의 특성으로 정해진 크기만큼 한 정점에대해 크기를 변화시킬 수 있다.

그 다음으로 중요한 것은 방향이 없는 그래프라는점 물론 테스트 케이스는 문제가 없었지만 모든 반례를 직접 찾아볼 수 없으므로 방향이 없다는 것이 강조되어 있으면 그대로 해주도록 하자.

 

 

 

 

 

 

 

 

 

 

#include <iostream>
#include <vector>
using namespace std;


vector vec[1001];
int count = 0;
bool visit[1001];



void DFS(int x)
{

    visit[x] = true;

for(int i=0; i<vec[x].size(); i++)
{
if(!visit[vec[x][i]])
{
DFS(vec[x][i]);
}




}





}


int main(void)
{


int N,M;

cin >> N >> M;

for(int i=1; i<M+1; i++)
{

int a,b;

cin >> a >> b;

vec[a].push_back(b);
vec[b].push_back(a);


}

for(int i= 1; i<N+1; i++)
{

if(!visit[i])
{

count++;
DFS(i);

}




}

cout << count<<endl;




}

반응형

'Algorithm' 카테고리의 다른 글

백준 15809번 전국시대  (0) 2019.08.10
백준 11286번 절댓값 힙  (0) 2019.08.09
백준 2804번 크로스워드 만들기  (0) 2019.08.07
백준 2857번 FBI  (0) 2019.08.06
백준 4604번 Steganography  (0) 2019.08.05