1. 문제 링크
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어
www.acmicpc.net
2. 문제 및 입출력예제
3. 문제 풀이
인접행렬을 이용해서 무향 그래프를 연결시켰다.
1번을 큐에 넣고 큐가 빌 때까지 반복한다.
큐에서 꺼낸 정점의 인접 정점들을 큐에 넣고 방문처리를 한다.
큐에 들어갔던 정점의 수를 함께 세고, 마지막에 1을 빼고 출력한다.
4. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Queue;
public class Main {
static int V, E, adjMatrix[][], cnt;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
V = Integer.parseInt(br.readLine());
E = Integer.parseInt(br.readLine());
adjMatrix = new int[V][V];
String[] split = new String[2];
int from, to;
for(int i=0;i<E;i++) {
split = br.readLine().split(" ");
from = Integer.parseInt(split[0])-1;
to = Integer.parseInt(split[1])-1;
adjMatrix[from][to] = adjMatrix[to][from] = 1;
}
bfs();
System.out.println(cnt-1);
}
private static void bfs() {
Queue<Integer> queue = new ArrayDeque<>();
boolean[] visit = new boolean[V];
queue.offer(0);
visit[0] = true;
while(!queue.isEmpty()) {
int current = queue.poll();
cnt++;
for(int i=0;i<V;i++) {
if(adjMatrix[current][i] == 1 && !visit[i]) {
queue.offer(i);
visit[i] = true;
}
}
}
}
}
'ALGORITHM' 카테고리의 다른 글
백준 1697 숨바꼭질 (Java) (0) | 2023.03.16 |
---|---|
백준 2577 숫자의 개수 (Java) (0) | 2023.03.15 |
백준 14889 스타트와 링크 (Java) (0) | 2023.03.14 |
백준 2559 수열 (Java) (0) | 2023.03.14 |
백준 4659 비밀번호 발음하기 (Java) (0) | 2023.03.13 |