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

2022. 7. 19. 21:03Computer Science/Algorithm

반응형

DFS 혹은 BFS 를 사용하여 풀 수 있는 간단한 문제.

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

 

2606번: 바이러스

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

www.acmicpc.net

 

BFS 를 사용한 풀이 

#include <iostream>
#include <vector>
#include <deque>

using namespace std;

const int MAX = 101;
int N, M;
int answer=0;
vector<int> network[MAX];
bool visited[MAX];
deque<int> Q;

int DFS(int v) {
	Q.push_back(v);
	visited[v] = true;

	while (!Q.empty()) {
		int cur = Q.front();

		Q.pop_front();

		for (int i = 0; i < network[cur].size(); i++) {
			if (!visited[network[cur][i]]) {
				Q.push_back(network[cur][i]);
				visited[network[cur][i]] = true;
				answer++;
			}
		}
	}

	return cnt;

}

int main() {
	cin >> N >> M;

	for (int i = 0; i < M; i++) {
		int v1, v2;
		cin >> v1 >> v2;
		network[v1].push_back(v2);
		network[v2].push_back(v1);
	}

	DFS(1);

	cout << answer << " ";
}

 

DFS를 사용한 풀이 

#include <iostream>
#include <vector>
#include <deque>

using namespace std;

const int MAX = 101;
int N, M;
int answer = 0;
vector<int> network[MAX];
bool visited[MAX];
deque<int> Q;

void BFS(int v) {
	visited[v] = true;
	for (int i = 0; i < network[v].size() ; i++) {
		if (!visited[network[v][i]]) { 
			visited[network[v][i]] = true; 
			answer++;
			BFS(network[v][i]);
		}
	}
}

int main() {
	cin >> N >> M;

	for (int i = 0; i < M; i++) {
		int v1, v2;
		cin >> v1 >> v2;
		network[v1].push_back(v2);
		network[v2].push_back(v1);
	}

	BFS(1);

	cout << answer << " ";
}
반응형

'Computer Science > Algorithm' 카테고리의 다른 글

[백준 1920번 C++] 수 찾기  (0) 2022.07.21
[백준 12851번 C++] 숨바꼭질 2  (0) 2022.07.20
[백준 1303번 C++] 전쟁-전투  (0) 2022.07.19
[백준 15649번 C++] N과 M(1)  (0) 2022.07.14
[백준 1260번 C++] DFS와 BFS  (0) 2022.07.14