蓝桥杯 全球变暖
这是连通性判断的典型问题
代码
#include<bits/stdc++.h>
using namespace std;
inline int read() {
int ans = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-')f = -1;
ch = getchar();
}
while (ch <= '9' && ch >= '0') {
ans = ans * 10 + ch - '0';
ch = getchar();
}
return ans * f;
}
const int N = 1005;
char s[N][N];
bool vis[N][N];
int ans = 0;
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};
bool f;
void dfs(int x,int y) {
int cnt = 0;
for (int i = 0; i < 4; i ++ ) {
int nx = x + dx[i];
int ny = y + dy[i];
if (s[nx][ny] != '#')
break;
cnt++;
}
if (cnt == 4) {
f = true;
}
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (s[nx][ny] =='#' && !vis[nx][ny]) {
vis[nx][ny] = true;
dfs(nx,ny);
}
}
}
int main() {
int n =read();
for (int i = 1; i<= n; i++)
scanf("%s",s[i]+1);
int cnt = 0;
for (int i =1; i<= n; i++) {
for (int j = 1; j<= n; j++) {
if (!vis[i][j] && s[i][j] == '#') {
cnt++;
f = false;
dfs(i,j);
if (f)
ans++;
}
}
}
cout<<cnt - ans;
return 0;
}

浙公网安备 33010602011771号