반응형
import java.util.Scanner;
// 1012 유기농 배추
public class Main {
static int [][] arr;
static boolean [][] visited;
static int [][] temp = {{1,0},{0,1},{-1,0},{0,-1}};
static int M, N, K;
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int i=0; i<T; i++) {
M = sc.nextInt();
N = sc.nextInt();
K = sc.nextInt();
arr = new int[M][N];
visited = new boolean[M][N];
for(int j=0; j<K; j++) {
int r = sc.nextInt();
int c = sc.nextInt();
arr[r][c] = 1;
}
// for(int j=0; j<M; j++) {
// for(int k=0; k<N; k++) {
// System.out.print(arr[j][k] + " ");
// }
// System.out.println();
// }
int cnt = 0;
for(int j=0; j<M; j++) {
for(int k=0; k<N; k++) {
if(arr[j][k] == 0) continue;
if(visited[j][k] == true) continue;
DFS(j, k);
cnt++;
}
}
System.out.println(cnt);
}
}
public static void DFS(int x, int y) {
visited[x][y] = true;
for(int i=0; i<4; i++) {
int nextX = x+temp[i][0];
int nextY = y+temp[i][1];
if(isInside(nextX, nextY) && visited[nextX][nextY] == false && arr[nextX][nextY] == 1) {
DFS(nextX, nextY);
}
}
}
public static boolean isInside(int x, int y) {
if(x>=0 && x<M && y>=0 && y<N) return true;
else return false;
}
}
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
[7562] 나이트의 이동 (0) | 2019.04.02 |
---|---|
[2293] 동전 (0) | 2019.03.31 |
[1057] 토너먼트 (0) | 2019.03.31 |
[1966] 프린터 큐 (0) | 2019.03.31 |
[11403] 경로 찾기 (0) | 2019.03.25 |