p1141爆零 蒟蒻求助!(bfs)

P1141 01迷宫

ST_jz_xpj @ 2024-09-12 19:58:13

#include<iostream>
#include<queue>
using namespace std;
int n,m,a,b;int q4[1002][1002]={0};int num[100000]={0};
int q1[1002][1002]={0};bool q2[1002][1002]={0};
queue<int> x;
queue<int> y;
void bfs(int i,int j,int now){
    if(q2[i][j]!=1){
        q4[i][j]=now;
        num[now]++;

        if(q1[i][j]==0){
            if(q1[i+1][j]==1&&i+1<n+1)  {x.push(i+1);y.push(j);}
            if(q1[i-1][j]==1&&i-1>0)    {x.push(i-1);y.push(j);}
            if(q1[i][j+1]==1&&j+1<n+1)  {x.push(i);y.push(j+1);}
            if(q1[i][j-1]==1&&j-1>0)    {x.push(i);y.push(j-1);}
        }
        if(q1[i][j]==1){
            if(q1[i+1][j]==0&&i+1<n+1)  {x.push(i+1);y.push(j);}
            if(q1[i-1][j]==0&&i-1>0)    {x.push(i-1);y.push(j);}
            if(q1[i][j+1]==0&&j+1<n+1)  {x.push(i);y.push(j+1);}
            if(q1[i][j-1]==0&&j-1>0)    {x.push(i);y.push(j-1);}
        }
    }
    q2[i][j]=1;
    x.pop();y.pop();
    if(!x.empty())bfs(x.front(),y.front(),now);
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++)scanf("%1d",&q1[i][j]);
    }
    int now=0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(q2[i][j]!=1){
                x.push(i);y.push(j);
                bfs(x.front(),y.front(),now);
                now++;
            }
        }
    }
    for(int i=0;i<m;i++){
        cin>>a>>b;
        cout<<q4[a][b]<<endl;
        }
    }
    return 0;
}

悬关QAQ!


by Mzh2012 @ 2024-09-12 20:21:00

输入应该是 char 类型,它 01 之间没有空格。


by Mzh2012 @ 2024-09-12 20:36:25

@ST_jz_xpj


by ST_jz_xpj @ 2024-09-12 20:41:05

蟹蟹! 正在改。 @Mzh2012


by ST_jz_xpj @ 2024-09-12 21:28:29

已过,磁铁节


|