본문 바로가기
백준

[백준] 2606 - 바이러스, C++ (알고리즘 정리 예정)

by 황인태(intaehwang) 2020. 1. 6.
반응형

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

 

2606번: 바이러스

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

www.acmicpc.net

 본 문제는 '2004 한국정보올림피아드 지역본선 초등부 3번 문제'로 문제 분류는 '플로이드 와샬 알고리즘'이라고 되어 있는데 BFS로 풀린다. 최단 경로 알고리즘(정리 예정) 코딩 절차는 다음과 같다.

  1. 간선 정보 입력
  2. 정점 1에서 시작
  3. 감염된 컴퓨터 개수 파악
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <cstdio>
#include <queue>
#include <vector>
 
using namespace std;
 
int main() {
    bool chk[101];
    int n, m, x, y;
    scanf("%d %d"&n, &m);
    vector<int> v[101];
    for (int i = 0; i < m; i++) {
        scanf("%d %d"&x, &y);
        v[x].push_back(y);
        v[y].push_back(x);
    }
    queue<int> q;
    q.push(1);
    int cnt = 0;
    chk[1= true;
    // 감염된 컴퓨터 찾기
    while (!q.empty()) {
        int now = q.front();
        q.pop();
        cnt += 1;
        for (int i = 0; i < v[now].size(); i++) {
            int next = v[now][i];
            if (!chk[next]) {
                chk[next] = true;
                q.push(next);
            }
        }
    }
    cnt -= 1// 시작점 제외
    printf("%d", cnt);
    return 0;
}
cs
반응형

'백준' 카테고리의 다른 글

[백준] 11403 - 경로 찾기, C++  (0) 2020.01.07
[백준] 1697 - 숨바꼭질, C++  (0) 2020.01.06
[백준] 1012 - 유기농 배추, C++  (0) 2020.01.06
[백준] 2667 - 단지번호붙이기, C++  (0) 2020.01.06
[백준] 1260 - DFS와 BFS, C++  (0) 2020.01.06
Buy me a coffeeBuy me a coffee

댓글