通过深搜搜索每一个连通块,记录不能被淹没的联通块中的高地
AcWing 1233 全球变暖
#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
int n;
char g[N][N];
bool st[N][N];
int ans;
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
int flag;
void dfs(int x, int y){
st[x][y] = 1;
if(g[x][y - 1] == '#' && g[x - 1][y] == '#' && g[x][y + 1] == '#' && g[x + 1][y] == '#'){
flag = 1;
}
for(int i = 0; i < 4; i ++ ){
int xx = x + dx[i], yy = y + dy[i];
if(!st[xx][yy] && g[xx][yy] == '#'){
dfs(xx, yy);
}
}
}
int main()
{
cin>>n;
for(int i = 1; i <= n; i ++ ){
for(int j = 1; j <= n; j ++ ){
cin>>g[i][j];
}
}
for(int i = 1; i <= n; i ++ ){
for(int j = 1; j <= n; j ++ ){
if(g[i][j] == '#' && !st[i][j]){
flag = 0;
dfs(i, j);
if(!flag) ans ++ ;
}
}
}
cout<<ans<<endl;
return 0;
}