Apr 072012
Lake Counting (POJ No.2386)
재귀 함수를 이용하여 구현하였다.
import java.util.Scanner; public class P2386 { public static int[][] arr = new int[102][102]; public static void check(int x, int y, int num) { arr[x][y] = num; if (arr[x - 1][y] == 0) check(x - 1, y, num); if (arr[x + 1][y] == 0) check(x + 1, y, num); if (arr[x - 1][y - 1] == 0) check(x - 1, y - 1, num); if (arr[x][y - 1] == 0) check(x, y - 1, num); if (arr[x + 1][y - 1] == 0) check(x + 1, y - 1, num); if (arr[x - 1][y + 1] == 0) check(x - 1, y + 1, num); if (arr[x][y + 1] == 0) check(x, y + 1, num); if (arr[x + 1][y + 1] == 0) check(x + 1, y + 1, num); } public static void main(String[] args) { int x, y; int num = 0; Scanner scan = new Scanner(System.in); x = scan.nextInt(); y = scan.nextInt(); for (int i = 0; i <= x + 1; i++) { for (int j = 0; j <= y + 1; j++) { arr[i][j] = -1; } } for (int i = 1; i <= x; i++) { char[] tmp = scan.next().toCharArray(); for (int j = 0; j < y; j++) { if (tmp[j] == 'W') { arr[i][j + 1] = 0; } } } for (int i = 1; i <= x; i++) { for (int j = 1; j <= y; j++) { if (arr[i][j] == 0) { check(i, j, ++num); } } } System.out.println(num); } }