样例过了,0分
#include<bits/stdc++.h>
using namespace std;
int flag[1010][1010];
int a[100010]={0};
char s[1010][1010];
const int dx[]={0,-1,0,1,0,-1,-1,1,1,-2,0,2,0};
const int dy[]={0,0,1,0,-1,-1,1,1,-1,0,2,0,-2};
int n,m,x,y,ans=1,num=0;
void bfs(int startx,int starty){
queue<int>qx;
queue<int>qy;
flag[startx][starty]=1;
qx.push(startx);
qy.push(starty);
while(!qx.empty() && !qy.empty()){
int nowx,nowy;
nowx=qx.front();
nowy=qy.front();
qx.pop();
qy.pop();
for(int i=1;i<=12;i++){
int newx,newy;
newx=dx[i]+nowx;
newy=dy[i]+nowy;
if(newx>n || newx<1 || newy>m || newy<1 || s[newx][newy]=='#' || flag[newx][newy]!=0)
{
continue;
}
flag[newx][newy]=1;
qx.push(newx);
qy.push(newy);
}
}
}
int main( ){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%1c",&s[i][j]);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(flag[i][j]==0 && s[i][j]!='#'){
bfs(i,j);
num++;
}
}
}
cout<<num;
return 0;
}