알고리즘 공부(C++)

[C++] 백준 2606 <바이러스>

혀니리리 2023. 8. 20. 17:17
728x90

2606번: 바이러스 (acmicpc.net)

 

2606번: 바이러스

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

www.acmicpc.net

내 블로그에 있던 bfs 정리글을 고대로 참조해서 풀었는데..

맞게한거같은데 자꾸 오류가 나길래 무엇이 원인인지 했더니만

우선 프로그래머스와는 다르게 백준은 cin도 내가 지정을 해줘야하기 때문에

배열크기나 원소의 초기값을 제대로 설정해줘야하는듯..

int의 초기값은 0이어서 괜찮지만 bool의 초기값은 true이기 때문에 {false,}를 이용해서 초기값을 설정해주어야 한다.

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

int main()
{
    int answer = 0;
    int comCount; int lineCount;
    cin >> comCount;
    bool isVisited[comCount + 1] = {false,};
    vector<int> graph[comCount + 1];
    cin >> lineCount;
    for(int i = 0; i < lineCount; i++)
    {
        int a,b;
        cin >> a >> b;
        graph[a].push_back(b);
        graph[b].push_back(a);
    }
    queue<int> q;
    q.push(1);
    while(!q.empty())
    {
        int x = q.front();
        q.pop();
        for(int i = 0; i < graph[x].size() ; i++)
        {
            int back = graph[x][i];
            if(!isVisited[back]){
                q.push(back);
                isVisited[back] = true;
                if(back > 1)
                {
                    answer++;   
                }
            }
        }
    }
    cout << answer << endl;
    return 0;
}

또한, 단순히 깊이를 구하는것이 아닌, 1과 연결된것들을 구해야 하므로 양방향으로 넣어줘야 한다.

728x90