728x90
반응형
문제
https://www.acmicpc.net/problem/2606
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍
www.acmicpc.net

접근법
간단한 BFS문제이다. 오랜만에 adjacants를 쓰는 문제가 나와 기분이 좋았다. (그동안은 배열에서 +- 1하면서 하느라 귀찮았다...)
BFS를 시작점을 1로 해서 visited가 1로바뀌는 순간마다 cnt를 ++ 해주면 된다.
다만 자기자신은 빼야하므로, 마지막 출력때 -1을 해주었다.
BFS개념을 알고있으면 얼마 걸리지 않을 문제이다.
코드
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int cnt = 0;
void BFS(vector<vector<int>>& adjacants, vector<int>& visited)
{
queue<int> q;
q.push(1);
while (!q.empty())
{
int here = q.front();
q.pop();
if (visited[here] != 1)
{
visited[here] = 1;
for (int i : adjacants[here])
q.push(i);
cnt++;
}
}
}
int main()
{
int N, M;
cin >> N;
cin >> M;
vector<vector<int>> adjacants(N + 1);
vector<int> visited(N + 1,0);
for (int i = 0; i < M; i++)
{
int from, to;
cin >> from >> to;
adjacants[from].push_back(to);
adjacants[to].push_back(from);
}
BFS(adjacants,visited);
cout << cnt - 1;
}

반응형
'알고리즘' 카테고리의 다른 글
백준 4963번 - 섬의 개수(C++/그래프/너비 우선 탐색/BFS) (0) | 2024.03.13 |
---|---|
백준 2156번 - 포도주 시식(C++/DP/Dynamic Programming) (0) | 2024.03.11 |
백준 10816번 - 숫자카드2(C++/병합 정렬/ Merge Sort/ 이분 탐색) (0) | 2024.03.07 |
백준 1992번 - 쿼드트리(C++/분할 정복/ 재귀 함수) (0) | 2024.03.04 |
백준 2667 번 - 단지번호붙이기(C++/BFS/Graph) (0) | 2024.02.29 |