문제링크 : https://www.acmicpc.net/problem/4963
문제풀이
DFS/BFS로 풀 수 있는 문제이다.
DFS로 풀었으며
상하좌우, 대각선 네 방향으로 이동하면서 땅이 있는지 체크하였다.
소스코드
import java.io.*;
import java.util.*;
public class p_4963 {
static final int MAX = 50;
static int[][] map = new int[MAX][MAX];
static int[] dx = new int[] {0, -1, -1, -1, 0, 1, 1, 1};
static int[] dy = new int[] {1, 1, 0, -1, -1, -1, 0, 1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String input = br.readLine();
StringTokenizer st = new StringTokenizer(input);
int w = Integer.parseInt(st.nextToken());
int h = Integer.parseInt(st.nextToken());
if (w == 0 && h == 0) break;
for (int i = 0; i < h; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < w; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
int count = 0;
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (map[i][j] == 1) {
dfs(w, h, i, j);
count++;
}
}
}
System.out.println(count);
}
br.close();
}
public static void dfs(int w, int h, int x, int y) {
for (int i = 0; i < 8; i++) {
int moveX = x + dx[i];
int moveY = y + dy[i];
if (moveX >= 0 && moveX < h && moveY >= 0 && moveY < w) {
if (map[moveX][moveY] == 1) {
map[moveX][moveY] = 0;
dfs(w, h, moveX, moveY);
}
}
}
}
}
'Algorithm > 문제풀이' 카테고리의 다른 글
| [LeetCode] 2번: Add Two Numbers (0) | 2019.06.28 |
|---|---|
| [LeetCode] 1번: Two Sum (0) | 2019.06.28 |
| [백준] 10828번: 스택 (0) | 2019.06.28 |
| [백준] 1012번: 유기농 배추 (0) | 2019.06.21 |
| [백준] 2667번: 단지번호붙이기 (0) | 2019.06.21 |