알고리즘/PS

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

BigmacGood 2022. 3. 15. 21:37

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

 

2606번: 바이러스

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

www.acmicpc.net

 

백준 2606번 바이러스를 풀어봤습니다.

 

아래는 전체 코드입니다.

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;

bool visited2[1001];	// For BFS
vector<int> graph[1001];	// Graph
queue<int> q;	// For BFS

void BFS(int v);

int main() {
	int n, edge, start;
	cin >> n;
	cin >> edge;
	start = 1;
	
	for (int i = 0; i < edge; i++) {
		int temp1, temp2;
		cin >> temp1 >> temp2;
		
		// Two-way edge
		graph[temp1].push_back(temp2);
		graph[temp2].push_back(temp1);
	}

	for (int i = 0; i < 1001; i++) {
		if (graph[i].size() != 0) {

			// Sort and remove duplicate numbers
			sort(graph[i].begin(), graph[i].end());
			graph[i].erase(unique(graph[i].begin(), graph[i].end()), graph[i].end());

			// To check the results of sorting and deleting
			//for (int j = 0; j < graph[i].size(); j++) {
			//	cout << i << ' ' << graph[i][j] << " \n";
			//}
		}
	}

	BFS(start);

	return 0;
}

void BFS(int v) {
	int count = 0;
	q.push(v);
	visited2[v] = 1;

	while (!q.empty()) {
		int x = q.front();
		q.pop();
		for (int i = 0; i < graph[x].size(); i++) {
			int y = graph[x][i];
			if (visited2[y] == 0) {
				count++;
				q.push(y);
				visited2[y] = 1;
			}
		}
	}

	cout << count;
}

 

'알고리즘 > PS' 카테고리의 다른 글

[C++] 백준 7576 : 토마토  (0) 2022.03.18
[C++] 백준 2178 : 미로찾기  (0) 2022.03.18
[C++] 백준 1012 : 유기농 배추  (0) 2022.03.17
[C++] 백준 2667 : 단지번호붙이기  (0) 2022.03.17
[C++] 백준 1260 : DFS와 BFS  (0) 2022.03.15