题解:B4297 [蓝桥杯青少年组国赛 2022] 翻卡片

题面

思路

看到题,首先就能想到搜索,看数据范围应该能过,就一遍过了。

输入后遍历矩阵,如果遇到 B 就把它当作 A 搜联通块,每次搜索记录最大答案,记得每次要先清空标记数组。

代码

#include<bits/stdc++.h>
using namespace std;
const int N=55;
int n;
char a[N][N];
int px[4]={1,-1,0,0},py[4]={0,0,1,-1};
bool vis[N][N];
int ans;
void bfs(int x,int y){
    memset(vis,0,sizeof(vis));
    queue<pair<int,int>> q;
    q.push({x,y});
    int res=0;
    vis[x][y]=1;
    while(!q.empty()){
        res++;
        int nx=q.front().first,ny=q.front().second;
        q.pop();
        for(int i=0;i<4;i++){
            int ux=nx+px[i],uy=ny+py[i];
            if(ux<1||ux>n||uy<1||uy>n||vis[ux][uy]||a[ux][uy]=='B') continue;
            vis[ux][uy]=1;
            q.push({ux,uy});
        }
    }
    ans=max(ans,res);
}
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]=='B') bfs(i,j);
        }
    }
    cout<<ans;
    return 0;
}
posted @ 2025-04-16 20:20  幻琳  阅读(19)  评论(0)    收藏  举报