染色做法,不知道哪里错了
#include <iostream>
using namespace std;
#define maxn 105
int n, m;
int a[maxn][maxn];
int sign[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
int cnt = 0;
void dfs(int x, int y) {
if(a[x][y])
cnt ++;
for(int i = 0; i < 4; i ++) {
int dx = x + sign[i][0], dy = y + sign[i][1];
if(a[dx][dy] != 0)
a[dx][dy] = 0, dfs(dx, dy);
}
// printf("x = %d, y = %d, ans = %d\n", x, y, cnt);
}
int main() {
cin >> n >> m;
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= m; j ++) {
char c;
cin >> c;
a[i][j] = c - '0';
}
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= m; j ++)
dfs(i, j);
cout << cnt << endl;
return 0;
}