오늘의 알고리즘

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

하늘하늘 . 2022. 5. 9. 20:24
 
#include <iostream>
#include <stack>
#include <tuple>
 
bool graph[101][101] = {};
bool virius[101] = {};
 
int main()
{
    int N = 0;
    int M = 0;
    int iCount = 0;
 
    std::cin >> N >> M;
 
    for (int i = 0; i < M; ++i)
    {
        int iX = 0;
        int iY = 0;
        std::cin >> iX >> iY;
 
        graph[iX][iY] = true;
        graph[iY][iX] = true;
    }
 
    std::stack<int> sta = {};
    sta.push(1);
 
    while (!sta.empty())
    {
        int iNumber = sta.top();
        sta.pop();
 
        if (!virius[iNumber])
        {
            virius[iNumber] = true;
            ++iCount;
        }
 
        else
            continue;
 
        for (int i = 1; i <= N; ++i)
        {
            if (i == iNumber)
                continue;
 
            if (graph[iNumber][i] && !virius[i])
                sta.push(i);
        }
    }
 
    std::cout << iCount - 1;
 
    return 0;
}
 

BFS / DFS 둘다 상관 없을 듯!

i <= N 여기서 = 빼먹고 좀 헤맸다