简单的复刻一下y总
include[HTML_REMOVED]
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
typedef pair[HTML_REMOVED] PII;
const int N = 1010;
int n;
int dx[4] = { -1,0,1,0 }, dy[4] = { 0,-1,0,1 };
bool st[N][N];//标记有没有走过
char map[N][N];
PII q[N * N];
void bfs(int x, int y, int& total, int& bound)
{
q[0] = {x,y};
st[x][y] = true;
int hh = 0, tt = 0;
while (hh <= tt)
{
bool is_bound = false;
PII t = q[hh];//取队头,遍历完出队
total;
for (int i = 0; i < 4; i)
{
int nx = t.first + dx[i];
int ny = t.second + dy[i];
//越界判断
if (st[nx][ny])continue;
if (nx < 0 || nx >= n || y < 0 || ny >= n)continue;
if (map[nx][ny] == ‘.’)//说明是bound
{
is_bound = true;
continue;
}
st[nx][ny] = true;
q[tt] = { nx,ny };
}
if (is_bound) bound++;
}
}
int main()
{
cin >> n;
int cnt = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> map[i][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (!st[i][j] && map[i][j] == '#')
{
int total = 0, bound = 0;
bfs(i, j, total, bound);
if (total == bound)cnt++;
}
}
}
cout << cnt;
return 0;
}
STL
include[HTML_REMOVED]
include[HTML_REMOVED]
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
typedef pair[HTML_REMOVED] PII;
const int N = 1010;
int n;
int dx[4] = { -1,0,1,0 }, dy[4] = { 0,-1,0,1 };
bool st[N][N];//标记有没有走过
char map[N][N];
queue[HTML_REMOVED] q;
void bfs(int x, int y, int& total, int& bound)
{
q.push({ x,y });
st[x][y] = true;
while (!q.empty())
{
bool is_bound = false;
PII t = q.front();//取队头,遍历完出队
total;
for (int i = 0; i < 4; i)
{
int nx = t.first + dx[i];
int ny = t.second + dy[i];
//越界判断
if (st[nx][ny])continue;
if (nx < 0 || nx >= n || y < 0 || ny >= n)continue;
if (map[nx][ny] == ‘.’)//说明是bound
{
is_bound = true;
continue;
}
st[nx][ny] = true;
q.push({ nx,ny });
}
q.pop();//队头出列
if (is_bound) bound++;
}
}
int main()
{
cin >> n;
int cnt = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> map[i][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (!st[i][j] && map[i][j] == '#')
{
int total = 0, bound = 0;
bfs(i, j, total, bound);
if (total == bound)cnt++;
}
}
}
cout << cnt;
return 0;
}