티스토리 뷰

알고리즘/백준

[백준] 2606번 바이러스

JeongHyeon 2017. 12. 20. 18:27

문제


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


풀이과정


처음에 문제를 보고 아 BFS나 DFS를 사용하면 되겠다 라고 생각했는데 밑에 알고리즘 분류에 플로이드-워샬 알고리즘이라고 적힌 것을 보고 플로이드-워샬 알고리즘에 대해 찾아보고 사용해보려고 했는데 너무 어려운 것 같다.

그리고 검색해보니 사람들도 주로 BFS, DFS를 이용하여 풀어서 DFS를 이용해서 풀었다.

DFS, BFS 에 대한 개념은 머리에 있는데 아직은 구현이 매끄럽게 되지 않는 것 같다.


소스코드


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
45
46
47
48
49
50
#include <iostream>
#include <queue>
 
using namespace std;
 
#define MAX 101 // 컴퓨터의 수는 최대 100개
int network[MAX][MAX]; 
int visited[MAX];
int num_cmptr, num_pair_cmptr;
int ans;
 
void DFS(int cur_vertex)
{
    visited[cur_vertex] = 1;
 
    for (int i = 1; i <= num_cmptr; i++)
    {
        // 방문했거나 또는 인접리스트가 없거나
        if (visited[i] == 1 || network[cur_vertex][i] == 0continue;
        else DFS(i);
    }
}
int main()
{
    cin.sync_with_stdio(false);
 
    int cmptr1, cmptr2;
 
    cin >> num_cmptr; // 컴퓨터의 수
 
    cin >> num_pair_cmptr; // 컴퓨터 쌍의 수
 
    while (num_pair_cmptr--)
    {
        cin >> cmptr1 >> cmptr2;
 
        network[cmptr1][cmptr2] = 1; network[cmptr2][cmptr1] = 1;
    }
    
    DFS(1);
 
    for (int i = 2; i <= num_cmptr; i++// 첫 번째 컴퓨터를 제외하고 방문한 컴퓨터 체크
    {
        if (visited[i] == 1) ans++;
    }
 
    cout << ans;
 
    return 0;
}
cs


'알고리즘 > 백준' 카테고리의 다른 글

[백준] 10844번 쉬운 계단 수  (0) 2017.12.28
[백준] 1932번 숫자삼각형  (0) 2017.12.27
[백준] 11655번 ROT13  (0) 2017.12.19
[백준] 1158번 조세퍼스 문제  (0) 2017.12.15
[백준] 1874번 스택 수열  (1) 2017.12.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함