2606. 바이러스

https://www.acmicpc.net/problem/2606





1. 접근


1번이 연결된 그래프의 노드수를 구하는 문제다.


인접리스트로 구성한 맵에 대해 1번 노드를 DFS / BFS 하면 되겟다.


DFS()로 풀어보자.



2. 풀이


DFS()는 재귀적으로 X에 연결된 노드가 몆개인지 알려다 줘야 한다.


DFS(1)이 DFS(2)를 불렀고, 최종적으로는 DFS(1)에게 DFS(2)에서 얼마나 진행되는지 알려줘야 하는 것이다.



3. 코드


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
#include <stdio.h>
#include <vector>
using namespace std;
 
int n, m, a, b;
int visit[101];
vector<vector<int>> map;
 
int dfs(int x) {
    int cnt = 1;
    visit[x] = 1;
 
    for (auto next : map[x]) {
        if (visit[next])
            continue;
 
        cnt += dfs(next);
    }
    return cnt;
}
 
int main() {
    scanf("%d %d"&n, &m);
    map.resize(n + 1);
 
    for (int i = 0; i < m; ++i) {
        scanf("%d %d"&a, &b);
        map[a].push_back(b);
        map[b].push_back(a);
    }
 
    printf("%d", dfs(1- 1);
 
    return 0;
}
cs


'알고리즘 > 브루트 포스' 카테고리의 다른 글

백준) 3055 탈출  (3) 2018.01.14
백준) 10216 Count Circle Groups  (0) 2017.10.09
백준) 2178 미로 탐색  (3) 2017.10.09
백준) 7569 토마토  (3) 2017.09.28
백준) 7576 토마토  (0) 2017.09.28

+ Recent posts