본문 바로가기

알고리즘/백준 (JAVA)

백준 1012 유기농 배추 / java 자바

www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 

www.acmicpc.net

 

import java.util.*;

public class Main {
	static int[][] map;
	static boolean[][] ck;
	static Queue<int[]> q;
	static int N, M, K;
	static int[] dx = {0, -1, 0, 1};
	static int[] dy = {-1, 0, 1, 0};
	
	static void bfs(int x, int y) {
		q.add(new int[]{x, y});
		while (!q.isEmpty()) {
			x = q.peek()[0];
			y = q.peek()[1];
			q.remove();
			ck[x][y] = true;
			for (int i = 0; i < 4; i++) {
				int xx = x + dx[i];
				int yy = y + dy[i];
				if (xx < 0 || xx >= N || yy < 0 || yy >= M) continue;
				if (map[xx][yy] == 0 || ck[xx][yy]) continue;
				q.add(new int[]{xx, yy});
				ck[xx][yy] = true;
			}
		}
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		for (int t = 0; t < T; t++) {
			N = sc.nextInt();
			M = sc.nextInt();
			K = sc.nextInt();
			map = new int[N][M];
			ck = new boolean[N][M];
			for (int k = 0; k < K; k++) {
				int X = sc.nextInt();
				int Y = sc.nextInt();
				map[X][Y] = 1;
			}
			int cnt = 0;
			for (int i = 0; i < N; i++) {
				for (int j = 0; j < M; j++) {
					if (map[i][j] == 0 || ck[i][j]) continue;
					q = new LinkedList<int[]>();
					bfs(i, j);
					cnt++;
				}
			}
			System.out.println(cnt);
		}
		
	}
}