입력 : 첫째 줄 - 컴퓨터의 수 (1 ≤ 컴퓨터의 수 ≤ 100)
두번째 줄 - 직접 연결되어 있는 컴퓨터의 쌍의 수
세번째 줄 - 직접 연결되어 있는 컴퓨터의 번호 쌍
두번째 줄의 수만큼 세번째 줄 반복
출력 : 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수
O(V + E)
V : 정점의 수
E : 간선의 수
BFS
import java.util.*;
public class Main {
static boolean[] visited;
static ArrayList<Integer>[] graph;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int numComputers = scanner.nextInt();
int numConnections = scanner.nextInt();
visited = new boolean[numComputers + 1];
graph = new ArrayList[numComputers + 1];
for (int i = 1; i <= numComputers; i++) {
graph[i] = new ArrayList<>();
}
for (int i = 0; i < numConnections; i++) {
int a = scanner.nextInt();
int b = scanner.nextInt();
graph[a].add(b);
graph[b].add(a);
}
scanner.close();
System.out.println(bfs(1) - 1); // 1번 컴퓨터 제외
}
static int bfs(int start) {
Queue<Integer> queue = new LinkedList<>();
queue.add(start);
visited[start] = true;
int count = 0;
while (!queue.isEmpty()) {
int node = queue.poll();
count++;
for (int neighbor : graph[node]) {
if (!visited[neighbor]) {
visited[neighbor] = true;
queue.add(neighbor);
}
}
}
return count;
}
}