用bfs做不难,但用scanf(%c),要注意。每次都输出检查一下
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+100;
char s[maxn][maxn];
bool ok[maxn][maxn];
int n,cnt;
bool flag;
struct node{
int x,y;
};
queue<node> p;
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
void bfs(int x,int y){
node c;
c.x=x;c.y=y;
p.push(c);
ok[x][y]=true;
while(!p.empty()){
node Top=p.front();
p.pop();
int xx=Top.x,yy=Top.y;
int num=0;
for(int i=0;i<4;i++){
int tx=xx+dx[i],ty=yy+dy[i];
if(s[tx][ty]=='#') num++;
if(tx<1||tx>n||ty<1||ty>n||ok[tx][ty]||s[tx][ty]!='#')
continue;
c.x=tx;c.y=ty;
p.push(c);
ok[tx][ty]=true;
}
if(num==4)
flag=true;
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
getchar();
for(int j=1;j<=n;j++){
scanf("%c",&s[i][j]);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(!ok[i][j]&&s[i][j]=='#'){
flag=false;
bfs(i,j);
if(!flag) cnt++;
}
}
}
printf("%d\n",cnt);
}