문제
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번컴퓨터부터 돌리게되면 감염된 바이러스 컴퓨터를 도출해낼 수 있다.
'Algorithm > graph' 카테고리의 다른 글
| [백준] 알고리즘 7562번 - 나이트의 이동문제 (0) | 2021.08.19 |
|---|---|
| [백준] 알고리즘 7576번 - 토마토문제 (0) | 2021.08.18 |
| [백준] 알고리즘 2178번 - 미로 탐색문제 (0) | 2021.08.18 |
| [백준] 알고리즘 2667번 - 단지번호붙이기문제 (0) | 2021.08.18 |
| [백준] 알고리즘 1707번 - 이분 그래프문제 (0) | 2021.08.18 |
