KDHzoot's Github

Code for study, project, etc

자세히보기

알고리즘/PS

[백준 2606] 바이러스

kdhzoot 2020. 8. 20. 22:28

문제 링크 : https://www.acmicpc.net/problem/2606

 

2606번: 바이러스

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

www.acmicpc.net

1번부터 dfs를 돌며 탐색한 노드의 수를 세는 문제이다


#include<cstdio>

// 인접행렬
int map[101][101] = { 0 };
// 노드를 방문했는지 저장하는 visit 배열
int visit[101] = { 0 };
int computer_num, ans = 0;

// 감염된 사람을 전부 찾아내는 dfs
void dfs(int n)
{
    ans++;  // dfs 한번 돌때마다 새로운 사람이 감염된다는 것
    visit[n] = 1;   // 방문했으므로 1
    for (int i = 1; i <= computer_num; i++) // 모든 노드중에
    {
        if (map[n][i] && !visit[i]) dfs(i);  // 이동가능하고 방문한적 없으면 탐색
    }
}

int main()
{
    int n;
    int x, y;
    scanf("%d %d", &computer_num, &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d %d", &x, &y);
        map[x][y] = map[y][x] = 1;  // 양방향 그래프
    }

    // 바이러스는 1번부터 시작
    dfs(1);

    // 1번은 바이러스 걸린 사람에서 제외해야되므로
    // ans - 1 을 출력
    printf("%d", ans - 1);  

    return 0;
}

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

[백준 14997] 주난의 난  (0) 2020.08.20
[백준 7576] 토마토  (0) 2020.08.20
[백준 4963] 섬의 개수  (0) 2020.08.20
[백준 2178] 미로 탐색  (0) 2020.08.20
[백준 11724] 연결 요소의 개수  (0) 2020.08.20