题目背景
oibh总部突然被水淹没了!现在需要你的救援……
题目描述
oibh被突来的洪水淹没了>.<还好oibh总部有在某些重要的地方起一些围墙,用号表示,而一个封闭的号区域洪水是进不去的……现在给出oibh的围墙建设图,问oibh总部没被淹到的重要区域(由"0"表示)有多少。
输入格式
第一行是两个数,x和y(x,y<=500)
第二行及以下是一个由和0组成的xy的图。
输出格式
输出没被水淹没的oibh总部的“0”的数量。
输入输出样例
输入 #1
样例输入1
4 5
00000
0000
000
0000样例输入2 5 5
'*****
00*
'0
00*
输出
样例输出1
1样例输出
2 5
import java.util.*;
public class Main {
public static void main(String[] args) {
Main m = new Main();
m.handleInput();
}
int n = 0;
int m = 0;
int sum = 0;
int t = 0;
int s = 0;
int[][] a = new int[550][550];
int[][] b = new int[550][550];
int[] aa = new int[] { 0, 1, 0, -1 };
int[] bb = new int[] { 1, 0, -1, 0 };
public void handleInput() {
Scanner in = new Scanner(System.in);
if (in.hasNext()) {
n = in.nextInt();
m = in.nextInt();
}
for (int i = 1; i <= n; i++) {
String s = in.next().trim();
for (int j = 1; j <= s.length(); j++) {
a[i][j] = s.charAt(j - 1);
if (a[i][j] == '0') {
b[i][j] = 0;
} else {
b[i][j] = 1;
}
}
}
in.close();
dfs(0, 0);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (b[i][j] == 0) {
sum++;
}
}
}
System.out.println(sum);
}
public void dfs(int x, int y) {
if (x < 0 || y < 0 || x > n + 1 || y > m + 1 || b[x][y] != 0) {
return;
}
b[x][y] = 2;
for (int i = 0; i < 4; i++) {
dfs(x + aa[i], y + bb[i]);
}
}
}