Baekjoon Review

[Silver 3] 2606번 바이러스

hanseongbugi 2023. 11. 3. 14:31

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

 

2606번: 바이러스

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

www.acmicpc.net

 

이 문제는 BFS를 사용해서 해결할 수 있다.

 

웜 바이러스는 양방향 그래프의 특성을 가진다. 

또한 웜 바이러스가 감염 시킬 수 있는 컴퓨터의 최대 수는 N이다.

 

이러한 점을 통해 반복문으로 통해 N까지 순회하고 현재 컴퓨터에서 웜이 뻗어 나갈 수 있는 컴퓨터를 찾는다.

감염시킬 컴퓨터가 있다면 counter를 증가시킨다.

 

#include <iostream>
#include<queue>
#include<cstring>
using namespace std;

char graph[101][101] = { 0, };
int visited[101]= { 0, };
int N, M, counter = 0;
queue<int> q;

void bfs() {
	q.push(1);
	visited[1] = 1;

	while (!q.empty()) {
		int now = q.front();
		q.pop();
		for (int i = 0; i <= N; i++) {
			if (!graph[now][i]) continue;
			if (!visited[i]) {
				q.push(i);
				visited[i] = 1;
				counter += 1;
			}
		}
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin >> N;
	cin >> M;

	for (int i = 0; i < M; i++) {
		int go, to;
		cin >> go >> to;
		graph[go][to] = 1;
		graph[to][go] = 1;
	}
	bfs();
	cout << counter << '\n';
}