2606 - 바이러스

Solution

code

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

void dfs(int node, vector<vector<int>> adj, bool infected[])
{
    infected[node] = true;
    for(int i = 0; i < adj[node].size(); i++)
    {
        int neighbor = adj[node][i];
        if(!infected[neighbor]) dfs(neighbor, adj, infected);
    }
}

int main()
{
    int N;
    cin >> N;
    int M;
    cin >> M;

    vector<vector<int>> adj(N+1);
    bool infected[N+1] = {false};
    infected[1] = true;
    for(int i = 0; i < M; i++)
    {
        int a, b;
        cin >> a >> b;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }

    int count = 0;
    dfs(1, adj, infected);
    for(int i = 2; i < N+1; i++) if(infected[i] == true) count++;
    cout << count << endl;
    return 0;
}
void dfs(int start, vector<vector<int>> adj, bool infected[])
{
    stack<int> s;
    s.push(start);

    while (!s.empty()) {
        int node = s.top();
        s.pop();

        if (!infected[node]) {
            infected[node] = true;
            for (int i = 0; i < adj[node].size(); i++) {
                int neighbor = adj[node][i];
                s.push(neighbor);
            }
        }
    }
}

ref

2606번: 바이러스

1260번: DFS와 BFS 풀이