본문 바로가기
코딩/문제풀이-백준

백준 2606번 - 바이러스 (C++)

by 남대현 2021. 7. 9.
반응형

문제

해결 방법

링크(pair형)를 담는 벡터에 링크를 모두 담은 후, BFS방식을 사용하여 탐색함.

 

아쉬웠던 점

링크를 그냥 벡터에 넣어서 그래프 탐색 과정에서 모든 링크를 순회하다 보니 복잡도가 올라갔다. 2차원 형식으로 만들어서 줄여야 했는데 간만이라 잊었다...

 

코드

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
38
39
40
41
42
43
44
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    int Num, Link_Num, ans = 0;
    cin >> Num >> Link_Num;
    queue<int> Que;
    vector<bool> Vec_Check(Num + 1false);
    vector<pair<intint>> Vec(Link_Num * 2 + 1);
 
    for (int i = 0; i < Link_Num * 2; i += 2)
    {
        cin >> Vec[i].first >> Vec[i].second;
        Vec[i + 1].first = Vec[i].second;
        Vec[i + 1].second = Vec[i].first;
    }
 
    //Bfs
    Que.push(1);
    Vec_Check[Que.front()] = true;
    while (!Que.empty())
    {
        for (auto& itor : Vec)
        {
            if (itor.first == Que.front() && !Vec_Check[itor.second])
            {
                Vec_Check[itor.second] = true;
                Que.push(itor.second);
                ++ans;
            }
        }
        Que.pop();
    }
 
    cout << ans;
}
cs

 평범한 BFS탐색이다.

 

반응형

댓글