考察dfs
#include<iostream>
using namespace std;
const int N = 1010;
int x;
int ans, flag;
char map[N][N];
int mark[N][N];
int dir[4][2] = { {1,0} ,{-1,0}, {0,1} ,{0,-1} };
void dfs(int n, int m)
{
mark[n][m] = 1;
if (n - 1 >= 0 && m - 1 >= 0) {
if (map[n + 1][m] == '#'&&map[n][m - 1] == '#'&&map[n - 1][m] == '#'&&map[n][m + 1] == '#')
flag = 1;
}
for (int k = 0; k < 4; k++)
{
int nn = n + dir[k][0];
int nm = m + dir[k][1];
if (nn >= 1 && nn <= x && nm >= 1 && nm <= x && mark[nn][nm] == 0 && map[nn][nm] == '#')
dfs(nn, nm);
}
}
int main()
{
cin >> x;
for (int i = 1; i <= x; i++)
for (int j = 1; j <= x; j++)
cin >> map[i][j];
for (int i = 1; i <= x; i++)
{
for (int j = 1; j <= x; j++)
{
if (map[i][j] == '#'&&mark[i][j] == 0)
{
flag = 0;
dfs(i, j);
if (flag == 0)
ans++;
}
}
}
cout << ans;
return 0;
}