코딩테스트
[알고리즘 문제 풀이] 백준 2606번 바이러스 (BFS/DFS)
컴맹 개발자
2024. 7. 4. 19:44
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
import java.util.ArrayList;
import java.awt.Point;
public class Main{
static int n,m;
//static int[][] arr;
static ArrayList<ArrayList<Integer>> arr;
static boolean[] visited;
static Queue<Integer> q;
static int count;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// node 개수
n = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
// 간선의 수
m = Integer.parseInt(st.nextToken());
arr =new ArrayList<ArrayList<Integer>>();
for(int i=0;i<n+1;i++){
arr.add(new ArrayList<Integer>());
}
visited=new boolean[n+1];
for(int i=0;i<m;i++){
st=new StringTokenizer(br.readLine());
int node1 = Integer.parseInt(st.nextToken()) ;
int node2 = Integer.parseInt(st.nextToken()) ;
// 간선 표현. 1이라면 연결되어 있다는 의미임.
arr.get(node1).add(node2);
arr.get(node2).add(node1);
}
bfs(1);
System.out.println(count);
}
static void bfs(int start){
q= new LinkedList<>();
q.offer(start);
visited[start]=true;
while(!q.isEmpty()){
int x= q.poll();
for(int i=0;i<arr.get(x).size();i++){
int y = arr.get(x).get(i);
if(!visited[y]){
q.offer(y);
visited[y]=true;
count++;
}
}
}
}
}