连通图问题
#include<bits/stdc++.h>
using namespace std;
const int N=1009;
char a[N][N];
int vis[N][N];
int n,flag,ans=0;
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
#define check(i,j) (i>=0&&i<n&&j>=0&&j<n)
void dfs(int x,int y){
vis[x][y]=1;
// cout<<i<<' '<<j<<'\n';
int sum=0;
for(int i=0;i<4;i++){
int nx=x+dir[i][0],ny=y+dir[i][1];
// cout<<nx<<","<<ny<<' ';
if(a[nx][ny]=='#'&&check(nx,ny))sum++;
}
// cout<<'\n';
// cout<<sum<<'\n';
if(sum==4) flag=1;
for(int i=0;i<4;i++){
int nx=x+dir[i][0],ny=y+dir[i][1];
if(a[nx][ny]=='#'&&vis[nx][ny]==0&&check(nx,ny))dfs(nx,ny);
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++) cin>>a[i][j];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(!vis[i][j]&&a[i][j]=='#'){
flag=0;
dfs(i,j);
if(flag==0)ans++;
}
}
}
cout<<ans<<'\n';
return 0;
}