BFS,0分求助QWQ

P1141 01迷宫

guang_zi_guei_ji @ 2024-09-09 22:10:51

#include<bits/stdc++.h>
using namespace std;
bool a[2000][2000],b[2000][2000];
int n,m,dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
struct go{
    int x,y;
}l,t;
queue<go>q;
int init(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            b[i][j]=0;
        }
    }
}
int f(int x,int y){
    b[x][y]=1;
    l.x=x,l.y=y;
    q.push(l);
    while(!q.empty()){
        t=q.back();
        q.pop();
        for(int i=0;i<4;i++){
            l.x=t.x+dx[i];
            l.y=t.y+dy[i];
            if(!b[l.x][l.y]&&a[l.x][l.y]!=a[t.x][t.y]&&l.x>0&&l.y>0&&l.x<=n&&l.y<=n){
                b[l.x][l.y]=1;
                q.push(l);
            }
        }
    }
    int sum=0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(b[i][j]==1){
                sum++;
            }
        }
    }
    return sum;
}
int main(){
    cin>>n>>m;
    char dz[2000];
    for(int i=1;i<=n;i++){
        cin>>dz;
        for(int j=0;j<n;j++){
            if(dz[j]=='0'){
                a[i][j+1]=0;
            }
            else{
                a[i][j+1]=1;
            }
        }
    }
    int x,y;
    for(int i=0;i<m;i++){
        cin>>x>>y;
        cout<<f(x,y)<<'\n';
    }
    return 0;
}

|