全WA求助

P1141 01迷宫

szk2022 @ 2023-12-06 18:26:11

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,vis[1010][100010],ans,xx,yy;
char num;
int dx[5]={0,1,-1,0,0};
int dy[5]={0,0,0,-1,1};
struct m{
    int num,ans;    
}mp[1010][100010];
struct node{
    int x,y;
}a;
queue<node> q;
queue<node> v;
void color(){
    for(int i=0;i<=n+1;i++){
        for(int j=0;j<=m+1;j++){
            if(i>=1 && i<=n && j>=1 && j<=m){
                continue;
            }else{
                mp[i][j].num=3;
            }
        }
    }
}
void bfs(){
    while(!q.empty()){
        node now;
        now.x=q.front().x,now.y=q.front().y;        
        v.push(now);
        q.pop();
        for(int i=1;i<=4;i++){
            int nx=now.x+dx[i],ny=now.y+dy[i];
            if(nx>=1 && nx<=n && ny>=1 && ny<=m){
                if(vis[nx][ny]==0){
                    if(mp[now.x][now.y].num==1){
                        if(mp[nx][ny].num==0){
                            vis[nx][ny]=1;
                            ans++;
                            node tmp;
                            tmp.x=nx,tmp.y=ny;
                            q.push(tmp);
                        }
                    }else{
                        if(mp[nx][ny].num==1){
                            vis[nx][ny]=1;
                            ans++;
                            node tmp;
                            tmp.x=nx,tmp.y=ny;
                            q.push(tmp);
                        }
                    }
                }
            }
        }
    }
}
signed main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>num;
            mp[i][j].num=num-'0';
        }
    }
    color();
    for(int i=1;i<=m;i++){
        ans=1;
        cin>>xx>>yy;
        if(vis[xx][yy]){
            cout<<mp[xx][yy].ans;
        }else{
            a.x=xx,a.y=yy;
            q.push(a);
            vis[xx][yy]=1;
            bfs();
            while(!v.empty()){
                mp[v.front().x][v.front().y].ans=ans;
                v.pop();
            }
            cout<<ans<<endl;            
        }

    }
}

|