바이러스
18 September 2019
문제 : https://www.acmicpc.net/problem/2606
이번은 BFS나 DFS로 그래프를 순회해서 방문할 수 있는 정점을 찾는 문제를 풀어보도록 하겠습니다.
#include<stdio.h>
static int N;
static int visited[101] = { 0 };
static int graph[101][101] = { 0 };
static int count = 0;
void dfs(int val);
int main(void) {
int M, x, y;
scanf("%d", &N);
scanf("%d", &M);
for (int i = 0; i < M; i++)
{
scanf("%d %d", &x, &y);
graph[x][y] = 1;
graph[y][x] = 1;
}
dfs(1);
if (count == 0)
{
printf("%d", count);
}
else {
printf("%d", count - 1);
}
}
void dfs(int val) {
if (visited[val] == 1)
{
return;
}
visited[val] = 1;
count++;
for (int i = 1; i <= N; i++)
{
if (graph[val][i] == 1 || graph[i][val] == 1) {
dfs(i);
}
}
}
dfs의 구현이 간단하니, dfs로 풀어보도록 합니다.각 정점을 순회하면서 방문하지 않은 점이면 count를 올려주고 모든 순회가 끝나면 count의 값을 return해주도록 합니다.
이 때, 문제에서 1번 컴퓨터를 통해 감염되는 컴퓨터의 수를 return하라고 하였으므로, 1번 컴퓨터를 제외한 값이 count-1을 return해줍니다.
다만, count값이 0인 경우는 그대로 return해주도록 합니다.