#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int n,m;
char s[110][110];
short map[110][110];
bool flag[110][110];
int t=0;
int fx[4]={1,-1,0,1};
int fy[4]={0,0,1,-1};
queue <int> qx;
queue <int> qy;
void bfs(int x,int y)
{
t+=1;
qx.push(x);
qy.push(y);
while(!qx.empty())
{
x=qx.front(); qx.pop();
y=qy.front(); qy.pop();
map[x][y]=t;
for(int i=0;i<4;i++)
{ if( x+fx[i]>=0 && x+fx[i]<n && y+fy[i]>=0 && y+fy[i]<m && flag[x+fx[i]][y+fy[i]]==1 && map[x+fx[i]][y+fy[i]]==0 )
{ map[x+fx[i]][y+fy[i]]=t;
qx.push(x+fx[i]);
qy.push(y+fy[i]);
}
}
}
return;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{ scanf("%s",s[i]); }
for(int i=0;i<n;i++)
{ for(int k=0;k<m;k++)
{ if( s[i][k]!='0' )
{ flag[i][k]=1; }
}
}
for(int i=0;i<n;i++)
{ for(int k=0;k<m;k++)
{ if( flag[i][k]==1 && map[i][k]==0 )
{ bfs(i,k); }
}
}
printf("%d",t);
return 0;
}
问题好像是会把斜角的细胞也算进去(我只写了上下左右
玄关