관리 메뉴

기억을 위한 기록들

[백준 11724: 연결 요소의 개수] - C++ 본문

Coding Test - cpp/BFS

[백준 11724: 연결 요소의 개수] - C++

에드윈H 2021. 1. 15. 12:27

www.acmicpc.net/problem/11724

 

11724번: 연결 요소의 개수

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

www.acmicpc.net

#include<iostream>
#include<string>
#include<vector>
#include<queue>
#include<string.h>
using namespace std;

int main()
{
	int N, M;
	int u, v;
	cin >> N >> M;
	vector<int> arr[1001];
	int visited[1001];

	if (M == 0 || N < 1) 
	{
		cout << 0 << endl;
		return 0;
	}


	memset(visited, 0, sizeof(visited));

	for (int i = 0; i < M; i++)
	{
		cin >> u >> v;
		arr[u].push_back(v);
		arr[v].push_back(u);
	}


	int cnt = 0;
	for (int j = 1; j <= N; j++)
	{

		if (visited[j])
			continue;
		cnt++;

		queue<int> Q;
		Q.push(j);

		while (!Q.empty())
		{
			int x = Q.front();
			Q.pop();

			for (int i = 0; i < arr[x].size(); i++)
			{
				int& target = visited[arr[x][i]];

				if (target == 0)
				{
					target = 1;
					Q.push(arr[x][i]);
				}
			}
		}
	}

	cout << cnt << endl;

	return 0;
}

'Coding Test - cpp > BFS' 카테고리의 다른 글

[백준 4936: 섬의 개수] - C++  (0) 2021.01.18
[백준 7562: 나이트의 이동] - C++  (0) 2021.01.15
[백준 1697: 숨바꼭질] - C++  (0) 2021.01.14
[백준 7576: 토마토] - C++  (0) 2021.01.13
[백준 2178 : 미로 탐색] - C++  (0) 2021.01.13