社区讨论

70pts TLE 求助!

P114101迷宫参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhjh5c0e
此快照首次捕获于
2025/11/04 02:29
4 个月前
此快照最后确认于
2025/11/04 02:29
4 个月前
查看原帖
CPP

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+5;
const int M = 1e5+5;
const int dx[] = {0,-1,0,1};
const int dy[] = {1,0,-1,0};
char a[N][N];
int n,m;
bool vis[N][N];
bool check(int x,int y){
    return x>=1 && x<=n && y>=1 && y<=n;
}
int bfs(int sx,int sy){
    memset(vis,0,sizeof(vis));
    int x = sx;
    int y = sy;
    queue<pair<int,int>> que;
    que.push({x,y});
    vis[x][y] = 1;
    while(!que.empty()){
        int nx = que.front().first;
        int ny = que.front().second;
        que.pop();
        for(int i = 0;i<4;i++){
            int nnx = nx+dx[i];
            int nny = ny+dy[i];
            if(a[nnx][nny] != a[nx][ny] && !vis[nnx][nny] && check(nnx,nny)){
                que.push({nnx,nny});
                vis[nnx][nny] = 1;
            }
        }
    }
    int ans = 0;
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=n;j++){
            if(vis[i][j])
                ans++;
        }
    }
    return ans;
}
int main(){
    cin>>n>>m;
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=n;j++){
            cin>>a[i][j];
        }
    }
    for(int i = 1;i<=m;i++){
        int x,y; cin>>x>>y;
        cout<<bfs(x,y)<<endl;
    }
    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...