최's 먹공로그
백준1012_유기농배추 본문
x
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class BOJ1012_유기농배추_최성호 {
static int[][] map;
static boolean[][] visited;
static int[] dx = { 0, 0, 1, -1 };
static int[] dy = { 1, -1, 0, 0 };
static int m;
static int n;
static Queue<Integer> q;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int tc = sc.nextInt();
for (int i = 1; i <= tc; i++) {
int cnt = 0;
m = sc.nextInt(); // 가로
n = sc.nextInt(); // 세로
int k = sc.nextInt(); // 배추위치 개수
map = new int[m][n];
visited = new boolean[m][n];
for (int j = 0; j < k; j++) {
int x = sc.nextInt();
int y = sc.nextInt();
map[x][y] = 1;
}
for (int j = 0; j < m; j++) {
for (int k1 = 0; k1 < n; k1++) {
if (map[j][k1] == 1 && !visited[j][k1]) {
bfs(j, k1);
//dfs(j, k1);
cnt++;
}
}
}
System.out.println(cnt);
} // end of tc
} // end of main
// DFS로
private static void dfs(int x, int y) {
visited[x][y] = true;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if(nx >= 0 && nx < m && ny >= 0 && ny < n) {
if(map[nx][ny] == 1 && !visited[nx][ny]) {
dfs(nx, ny);
}
}
}
} // end of dfs
// BFS로
private static void bfs(int x, int y) {
q = new LinkedList<Integer>();
visited[x][y] = true;
q.add(x);
q.add(y);
while (!q.isEmpty()) {
int nx = q.poll();
int ny = q.poll();
for (int i = 0; i < 4; i++) {
nx += dx[i];
ny += dy[i];
if (nx >= 0 && nx < m && ny >= 0 && ny < n) {
if (map[nx][ny] == 1 && !visited[nx][ny]) {
q.add(nx);
q.add(ny);
visited[nx][ny] = true;
}
}
}
}
} // end of bfs
} // end of class
'APS' 카테고리의 다른 글
백준3055_탈출 (0) | 2019.03.06 |
---|---|
SEA1257_[S/W 문제해결 응용] 6일차_K번째 문자열 (0) | 2019.02.26 |
백준1261_알고스팟 (0) | 2019.02.26 |
백준1931_회의실배정 (0) | 2019.02.26 |
SEA 1247_[S/W 문제해결 응용]3일차_최적경로 (2) | 2019.02.12 |