Little Jay

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

알고리즘/BOJ

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

Jay, Lee 2021. 8. 19. 15:51

dfs로 간단하게 풀 수 있는 문제이다.

1번 컴퓨터를 통해 감염되는 컴퓨터의 개수를 출력하면 되기 때문에,

탐색을 할 노드를 1번 노드로 고정을 해놓고,

1번 노드를 통해 다시 재귀로 탐색을 할 때마다 감염된 컴퓨터의 수를 하나씩 증가시켜주면 된다.

 

#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
#include <iostream>

using namespace std;
vector<int> a[1001];
bool check[1001];
int infected = 0;


void dfs(int node) {
    check[node] = true;
    
    for (int i = 0; i < a[node].size(); i++) {
        int next = a[node][i];
        if (check[next] == false) {
            infected += 1;
            dfs(next);
        }
    }
}

void bfs(int start) {
    queue<int> q;
    memset(check, false, sizeof(check));
    check[start] = true;
    q.push(start);
    while (!q.empty()) {
        int node = q.front();
        q.pop();
        printf("%d ", node);
        for (int i = 0; i < a[node].size(); i++) {
            int next = a[node][i];
            if (check[next] == false) {
                check[next] = true;
                q.push(next);
            }
        }
    }
}
int main() {
    int n, m;
    cin >> n;
    cin >> m;
    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        a[u].push_back(v);
        a[v].push_back(u);
    }
    for (int i = 1; i <= n; i++) {
        sort(a[i].begin(), a[i].end());
    }

    dfs(1);

    cout << infected << "\n";
    return 0;

}
Comments