蓝桥杯 全球变暖

这是连通性判断的典型问题

代码

#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;
}
posted @ 2025-03-27 18:39  Guaninf  阅读(7)  评论(0)    收藏  举报