P8662 [蓝桥杯 2018 省 AB] 全球变暖 - 洛谷 (luogu.com.cn)

DFS
cpp
#include<iostream>
using namespace std;
char a[1001][1001];
bool s[1001][1001];
int res = 0;
int n;
bool flag = true;
int dx[4] = { -1,0,1,0 };
int dy[4] = { 0,-1,0,1 };
void dfs(int x, int y) {
s[x][y] = true;
bool safe = true;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx<1 || ny>n || ny<1 || nx>n || a[nx][ny] == '.') {
safe = false;
break;
}
}
if (safe)flag = true;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 1 && nx <= n && ny >= 1 && ny <= n && a[nx][ny] == '#' && !s[nx][ny]) {
dfs(nx, ny);
}
}
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> a[i][j];
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (a[i][j] == '#' && !s[i][j]) {
flag = false;
dfs(i, j);
if (!flag)res++;
}
flag = false;
}
}
cout << res;
return 0;
}

