可恶,普及组题都不会做了,今天NOIp干脆不参加了(
#include <iostream>
#include <cstdio>
using namespace std;
const int SIZE = 105;
int n, m;
int a[SIZE][SIZE];
int f[SIZE][SIZE];
int cnt = 0;
int d[10][10] = {
{0,0},
{1,0},
{-1,0},
{0,1},
{0,-1}
};
void dfs(int i, int j) {
if (i>n || i<0 || j<0 || j>m) return;
if (a[i][j] == 0) {
f[i][j] = 0;
return;
}
bool flag = 0;
for (int k = 1; k <= 8; ++k){
if (f[i+d[k][0]][j+d[k][1]] != 0) {
f[i][j] = f[i+d[k][0]][j+d[k][1]];
flag = 1;
}
}
if (flag == 0) f[i][j] = ++cnt;
return ;
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j){
char ch;
ch = getchar();
if (isdigit(ch)) {
a[i][j] = ch-'0';
}
if (ch == '\n') {
ch = getchar();
a[i][j] = ch-'0';
}
}
}
for (int A = 1; A <= n; ++A) {
for (int B = 1; B <= m; ++B){
dfs(A, B);
//printf("%d ",f[A][B]);
}
//cout << endl;
}
cout << cnt;
}