样例全过,提交全错
#include<iostream>
const int MAXXY = 505;
int m[MAXXY][MAXXY], x, y, cnt = 0, stx = -1, sty = -1;
char temp;
void dfs(int startX, int startY) {
if (startX < 1 || startX > x || startY < 1 || startY > y || m[startX][startY] != 0) {
return;
}
if (m[startX][startY] == 1) return;
if (m[startX][startY] == 0) {
m[startX][startY] = 2; // 标记
} else return;
if (m[startX + 1][startY] == 0 && startX < x) dfs(startX + 1, startY);
if (m[startX - 1][startY] == 0 && startX > 1) dfs(startX - 1, startY);
if (m[startX][startY + 1] == 0 && startY < y) dfs(startX, startY + 1);
if (m[startX][startY - 1] == 0 && startY > 1) dfs(startX, startY - 1);
}
int main() {
scanf("%d%d", &x, &y);
for (int i = 1; i <= x; i++) {
getchar();
for (int j = 1; j <= y; j++) {
if (getchar() == '0') {
m[i][j] = 0;
} else {
m[i][j] = 1;
}
}
}
dfs(1, 1);
for (int i = 1; i <= x; i++) {
for (int j = 1; j <= y; j++) {
if (m[i][j] == 0) cnt++;
}
}
printf("%d\n", cnt);
return 0;
}