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);
}
}
}
'알고리즘 > 백준 (JAVA)' 카테고리의 다른 글
백준 2606 바이러스 / java 자바 (0) | 2021.04.13 |
---|---|
백준 2667 단지번호 붙이기 / java 자바 (0) | 2021.04.13 |
백준 3109 빵집 / java 자바 (0) | 2021.04.13 |
백준 17135 캐슬 디펜스 / java 자바 (0) | 2021.04.13 |
백준 15686 치킨배달 / java 자바 (0) | 2021.04.13 |