Algorithm/๋ฌธ์ œํ’€์ด

[๋ฐฑ์ค€] 11724๋ฒˆ - ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ (C++)

moaoh 2023. 7. 1. 22:35

 

 

๋ฌธ์ œ

๋ฐฉํ–ฅ ์—†๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์—ฐ๊ฒฐ ์š”์†Œ (Connected Component)์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N๊ณผ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฐ„์„ ์˜ ์–‘ ๋์  u์™€ v๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ u, v ≤ N, u ≠ v) ๊ฐ™์€ ๊ฐ„์„ ์€ ํ•œ ๋ฒˆ๋งŒ ์ฃผ์–ด์ง„๋‹ค.


์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


 

์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

6 5
1 2
2 5
5 1
3 4
4 6

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

2

์˜ˆ์ œ ์ž…๋ ฅ 2 ๋ณต์‚ฌ

6 8
1 2
2 5
5 1
3 4
4 6
5 4
2 4
2 3

์˜ˆ์ œ ์ถœ๋ ฅ 2 ๋ณต์‚ฌ

1โ€‹

ํ’€์ด๊ณผ์ •

์˜ˆ์ œ๋ฌธ์ œ๋ฅผ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์ •์  : ์ ์˜ ๊ฐœ์ˆ˜

๊ฐ„์„  : ์ ์„ ์„œ๋กœ ์ด์–ด์ฃผ๋Š” ์„  

์ด๋ผ๊ณ  ํ•˜๊ณ  ๊ทธ๋ฆผ์— ๋”ฐ๋ผ์„œ 1, 2, 5 ๊ฐ€ ํ•˜๋‚˜์˜ ์„ ์— ์ด์–ด์ ธ์žˆ๊ณ  3, 4, 6์ด ํ•˜๋‚˜์˜ ์„ ์— ์ด์–ด์ ธ์žˆ์–ด์„œ 2๊ฐœ์˜ ๋ฌถ์Œ์ด๋ผ ์—ฐ๊ฒฐ์š”์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 2๊ฐœ๊ฐ€ ๋˜๋Š”๊ฒƒ์ด๋‹ค.

code

#include <iostream>
#include <vector>
#include <queue>

std::vector<int> a[1001];

int		bfs(int start, int n)
{
	std::queue<int> q;
	int	visit[1001] = {0};
	int	count = 0;

	for(int i = 1; i <= n; i++)
	{
		if (!visit[i])
		{
			q.push(i);
			visit[i] = true;
			while (!q.empty())
			{
				int x = q.front();
				q.pop();
				for(int j = 0; j < a[x].size(); j++) {
					int y = a[x][j];
					if (!visit[y]) {
						q.push(y);
						visit[y] = true;
					}
				}
			}
			count++;
		}
	}
	return (count);
}

int		main()
{
	int	n, m, u, v;
	int	count = 0;
	std::cin >> n >> m;
	for(int i = 0; i < m; i++)
	{
		std::cin >> u >> v;
		a[u].push_back(v);
		a[v].push_back(u);
	}
	std::cout << bfs(1, n);
	return (0);
}

 

ํ›„๊ธฐ์“ฐ

๋ณธ๊ฒฉ์ ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ’€์–ด์•ผ๊ฒ ๋‹ค๊ณ  ๋งˆ์Œ์„ ๋จน๊ณ  bfs ๋ฌธ์ œ๋ฅผ ๋ดค๋Š”๋ฐ ๊ธฐ์–ต์ด ๊ฐ€๋ฌผ๊ฐ€๋ฌผํ•˜๋”๋ผ

ํ™•์‹คํ•˜๊ฒŒ ๊ฐœ๋…์„ ์žก์„ ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅ์„ ๋งŽ์ด ํ•ด์•ผํ•  ๊ฑฐ ๊ฐ™๋‹ค.