SOLUTION INFO
Java · Main.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static int[] dx = {1, 0, -1, 0};
static int[] dy = {0, -1, 0, 1};
static int n, m;
static int[][] arr;
static boolean[][] visited;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
while(t --> 0) {
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
arr = new int[n][m];
visited = new boolean[n][m];
while(k --> 0) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
arr[x][y] = 1;
}
int answer = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if(!visited[i][j] && arr[i][j] == 1) {
bfs(i, j);
answer++;
}
}
}
System.out.println(answer);
}
}
public static void bfs(int x, int y) {
Queue<int[]> queue = new LinkedList<>();
queue.add(new int[] {x, y});
visited[x][y] = true;
while(!queue.isEmpty()) {
int[] now = queue.poll();
for(int i = 0; i < 4; i++) {
int nx = now[0] + dx[i];
int ny = now[1] + dy[i];
if(nx >= 0 && nx < n && ny >= 0 & ny < m) {
if(!visited[nx][ny] && arr[nx][ny] == 1) {
queue.add(new int[] {nx, ny});
visited[nx][ny] = true;
}
}
}
}
}
}
SOLUTION DESCRIPTION
풀이 설명
등록된 풀이 설명이 없습니다.