문제
소스코드
#include<iostream>
#include<vector>
#include<queue>
constexpr int MAX_COMPUTER = 101;
bool visited[MAX_COMPUTER];
std::vector<int> v[MAX_COMPUTER];
int result;
void BFS(int started) {
std::queue<int> q;
q.emplace(started);
visited[started] = true;
while (q.empty() == false) {
int node = q.front();
q.pop();
//인접한 노드중에서 방문하지 않는 노드를 넣는다.
for (auto i : v[node]) {
if (visited[i] == false) {
++result;
visited[i] = true;
q.push(i);
}
}
}
}
int main() {
int n, m;
std::cin >> n; //컴퓨터의 개수
std::cin >> m; //컴퓨터 쌍의 수
for (int i = 0; i < m; ++i) {
int v1, v2;
std::cin >> v1 >> v2;
v[v1].emplace_back(v2);
v[v2].emplace_back(v1);
}
BFS(1); //바이러스는 1번 컴퓨터가 걸린다.
std::cout << result << "\n";
}
후기
BFS(Breadth First Search)를 사용하여 풀었다. BFS 혹은 DFS를 알고 있다면 어렵지 않게 풀 수 있는 문제이다.
관련 글
너비 우선 탐색(Breadth First Search)
출처 및 레퍼런스
문제 링크:https://www.acmicpc.net/problem/2606
'온라인 코딩 > 탐색(Search)' 카테고리의 다른 글
[구름 IDE] 비타알고 시즌2 학교 지도 만들기(★3) (0) | 2020.03.17 |
---|---|
[백준] 1991번 트리 순회 (0) | 2020.03.12 |
[백준] 1753번 최단경로 (0) | 2020.02.25 |
[백준] 1197번 최소 스패닝 트리 (0) | 2020.02.16 |
[백준] 1654번 랜선 자르기 (0) | 2020.02.09 |