smooth waters run deep

1d-1c/BOJ

2606_바이러스 (JAVA)

yeon_11 2020. 10. 23. 23:46
 

2606번: 바이러스

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

www.acmicpc.net

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
	static int N;
	static int M;
	static int[][] com;
	static int[] visited;
	static int ans=0;
    
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		M = sc.nextInt();
		com = new int[N+1][N+1];
		visited = new int[N+1];

		for(int i=0; i<M; i++){
			int temp1 = sc.nextInt();
			int temp2 = sc.nextInt();
			com[temp1][temp2]=com[temp2][temp1]=1;
		}

		BFS(1);
		System.out.println(ans);
	}
	public static void BFS(int n){
		Queue<Integer> q = new LinkedList<Integer>();
		q.offer(n);
		visited[n] = 1;

		while(!q.isEmpty()){
			int cur = q.poll();
			for(int i=1; i<=N; i++){
				if(com[cur][i]==1 && visited[i]==0){
					q.offer(i);
					visited[i]=1;
					ans++;
				}
			}
		}
	}
}

 

방향성이 있는 그래프에서는 1->2와 2->1이 다른 경우이고,

방향성이 없는 그래프에서는 1->2와 2->1이 같은 경우이다.

이거를 생각하지 못하고! 1-2가 연결되어 있을때, com[1][2]만 1로 초기화해서 틀렸습니다원인을 못찾았다ㅠㅠ

com[1][2]=com[2][1]=1 을 모두 1로 초기화해줘야한다!!!

 

 

[문제 풀이 생각 과정]

 

1. 방향성이 '없는' 그래프이므로, 입력받은 수에 대하여 com[x][y]=com[y][x]=1 로 초기화해준다.

 

2. 1과 연결된 것만 찾으면 되므로, 노드 개수만큼 visited[]배열을 만들어준다.

 

3. BFS()함수로 돌려준다

 

 

      

 

'1d-1c > BOJ' 카테고리의 다른 글

[변형 문제] 백준 1662_압축  (0) 2020.10.26
1662_압축 (JAVA)  (0) 2020.10.26
1697_숨바꼭질 (JAVA)  (0) 2020.10.23
7568_덩치 (JAVA)  (0) 2020.10.22
2231_분배합 (JAVA)  (0) 2020.10.21