본문 바로가기
백준/C++

백준 2606번 : 바이러스 [C++]

by 대니스 2022. 9. 1.

주소 : https://www.acmicpc.net/problem/2606

 

2606번: 바이러스

첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어

www.acmicpc.net

소스 코드 :

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;

int map[101][101];
int visit[101];
int n, cnt;

void computer(int node)
{
	visit[node] = 1;

	for (int i = 1; i <= n; i++)
	{
		if (!visit[i] && map[node][i] == 1)
		{
			cnt++;
			computer(i);
		}
	}
}

int main()
{
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int simulation;
	int u, v;
	cin >> n;
	cin >> simulation;

	for (int i = 0; i < simulation; i++)
	{
		cin >> u >> v;
		map[u][v] = map[v][u] = 1;
	}

	computer(1);

	cout << cnt;
}

마무리 : 처음에 이 문제를 볼 때 그래프 문제인 것을 깨달았다. 백준 문제를 풀면서 처음으로 그래프 문제를 풀게 된 것이었다. 문제를 읽고 학교에서 dfs와 bfs의 개념을 배워서 이 개념 중 나는 dfs로 문제를 풀었다. 이 문제 같은 경우에는 지정한 노드가 어떤 노드와  연결되었는지 알고 싶은 것이기 때문에 dfs와 bfs로 풀어도 상관이 없다.