https://www.acmicpc.net/problem/1012
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에
www.acmicpc.net
DFS를 이용하여 풀이해보았다:)
package com.dfs.bfs;
import java.io.*;
import java.util.*;
public class B1012 {
// 모든 경로를 찾아봐야하기 때문에 DFS를 이용
static int T; // 테스트 케이스
static int M; // 가로길이
static int N; // 세로길이
static int K; // 배추가 심어진 갯수
static int[][] map; // 배추밭
static int bug; // 벌레 갯수
static boolean[][] visited; // 방문여부
static int[] dx = {-1, 1, 0, 0}; // x축 이동
static int[] dy = {0, 0, -1, 1}; // y축 이동
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
T = Integer.parseInt(st.nextToken());
for(int i=0; i<T; i++) {
st = new StringTokenizer(br.readLine());
M = Integer.parseInt(st.nextToken());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
map = new int[M][N];
visited = new boolean[M][N];
bug = 0;
for(int j=0; j<K; j++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
map[x][y] = 1;
}
for(int m=0; m<M; m++) {
for(int n=0; n<N; n++) {
if(map[m][n]==1 && !visited[m][n]) {
bug++;
dfs(m,n);
}
}
}
System.out.println(bug);
}
}
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 && ny>=0 && nx<M && ny<N) {
if(map[nx][ny]==1 && !visited[nx][ny]) {
dfs(nx, ny);
}
}
}
}
}