本菜鸟在线求助,爆0

P1141 01迷宫

Ycz2023 @ 2024-11-11 21:55:28

本菜鸟在线求助,爆0

#include<bits/stdc++.h>
using namespace std;
struct nd {
  int r,c;
  bool w;
};
int n,m,cnt;
int xx[4]= {0,0,1,-1},yy[4]= {1,-1,0,0};
int b[1005][1005],a[100020][2],c[1005][1005];
queue <nd>p;//b存迷宫,a存每组数据,c存走没走过
int main() {
    cin >>n>>m;//输入n,m
    for(int i=1; i<n; i++) {
        for(int j=1; j<n; j++) {
            cin >>b[i][j];//输入迷宫
        }
    }
    for(int i=0; i<m; i++) {
        cin >>a[i][0]>>a[i][1];//输入每组坐标
    }
    for(int i=0; i<m; i++) {
        for(int q=1; q<=n; q++) {
            for(int e=1; e<=n; e++) {
                c[q][e]=1;//没走过的都标1
            }
        }
        int cnt=1;
        p.push({a[i][0],a[i][1],b[a[i][0]][a[i][1]]});
        c[a[i][0]][a[i][1]]=0;
        while(!p.empty()) {
            nd z=p.front();
            p.pop();
            for(int j=0; j<4; j++) {
                int u=z.r+xx[j],v=z.c+yy[j];
                if(u>=1&&u<=n&&v>=1&&v<=n&&z.w!=b[u][v]) {
                    if(c[u][v]==1) {
                        c[u][v]=0;
                        cnt ++;
                        if(z.w) {
                   //z.w=1,存0    
                            p.push({u,v,0});
                        } else {
                  //z.w=0,存1    
                            p.push({u,v,1});
                        }
                    }
                }
            }
        }
        cout <<cnt<<endl;
    }

帮本人过这题的,长命1000000000000岁


by Cultural_Revolution @ 2024-12-03 17:31:02

while循环里已经搜索过的点不需要再入队,否则死循环


|