Algorithm/graph

[백준] 알고리즘 2606번 - 바이러스문제

낭강 2021. 9. 8. 20:08
문제

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

 

2606번: 바이러스

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

www.acmicpc.net

소스코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> v[100];
bool check[101];
int n, e, ans;
void dfs(int x) {
	ans++;
	check[x] = true;
	for (int i = 0; i < v[x].size(); i++) {
		int next = v[x][i];
		if (check[next]) continue;
		check[next] = true;
		dfs(next);
	}
}
int main() {
	ios_base::sync_with_stdio(false), cin.tie(NULL);
	cin >> n >> e;
	for (int i = 0; i < e; i++) {
		int x, y;
		cin >> x >> y;
		v[x].push_back(y);
		v[y].push_back(x);
	}
	dfs(1);
	cout << ans - 1;
}
해설

문제를 이해했다면, 1번컴퓨터로 시작했을 때 연결되어있는 부분들을 깊게 탐색해야 한다는 것을 바로 캐치하실 겁니다.

그렇다면 간단하게 dfs를 이용하여 문제를 해결할 수 있다.

메인부분에서는 인접정점들을 연결시켜주고 dfs를 1번컴퓨터부터 돌리게되면 감염된 바이러스 컴퓨터를 도출해낼 수 있다.