#include<bits/stdc++.h>
using namespace std;
string mz[1000];
int n,ans,dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
struct node{
int x,y;
};
bool vis[1000][1000];
bool check(int x,int y)
{
return x>=0&&x<n&&y>=0&&y<n;
}
void bfs(int i,int j)
{
queue<node>q;
node start={i,j};
vis[i][j]=true;
q.push(start);
bool res=false;
while(!q.empty()){
node now=q.front();
q.pop();
if(!res){
res=true;
for(int i=0;i<4;i++){
int nx=dir[i][0]+now.x;
int ny=dir[i][1]+now.y;
if(check(nx,ny)&&mz[nx][ny]=='.'){
res=false;
break;
}
}
}
for(int i=0;i<4;i++){
int nx=dir[i][0]+now.x;
int ny=dir[i][1]+now.y;
if(check(nx,ny)&&mz[nx][ny]=='#'&&!vis[nx][ny]){
q.push({nx,ny});
vis[nx][ny]=true;
}
}
}
if(!res) ans++;
}
int main(){
ans=0;
cin>>n;
for(int i=0;i<n;i++)
cin>>mz[i];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
if(mz[i][j]=='#'&&!vis[i][j])//是陆地 就找岛
bfs(i,j);
}
cout<<ans<<'\n';
}
如果碰到一个没被访问的陆地就用bfs找他在的那块岛,看有没有不会被淹没的一块,然后全都标记访问过,然后就这样。