记忆化DFS+pr_q全RE求调

P1141 01迷宫

1004779564bzbjj @ 2024-06-05 22:19:22

本机手动输入数据(100X100以内规模)暂未测试出问题

自己的电脑也跑不了1000X1000的数据

一提交就RE



#include<bits/stdc++.h> 
using namespace std;
int n,m,c[1145][1145],v[1145][1145];
char mp[1145][1145];
int dx[5]={0,1,-1,0,0};
int dy[5]={0,0,0,-1,1};
int ans=0;
priority_queue <int>pr;
int ss(int x,int y,int z){
    v[x][y]=z;
    ans++;
    pr.push(x*1001+y);
    for(int i=1;i<=4;i++){
        int nx=x+dx[i];
        int ny=y+dy[i];
        if((mp[x][y]=='0'&&mp[nx][ny]=='1')||(mp[x][y]=='1'&&mp[nx][ny]=='0')){
            if(nx>0&&ny>0&&nx<=n&&ny<=n&&v[nx][ny]!=z){
                ss(nx,ny,z);
            }
        }
    }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>mp[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(v[i][j]==0){
                ans=0;
                ss(i,j,i*1001+j);
                while(pr.size()>0){
                    int px=pr.top()/1001;
                    int py=pr.top()%1001;
                    c[px][py]=ans;
                    pr.pop();
                }
            }
        }
    }
    for(int i=1;i<=m;i++){
        int x,y;cin>>x>>y;cout<<c[x][y]<<endl;
    }
    //for(int i=1;i<=n;i++){
    //  for(int j=1;j<=n;j++){
    //      cout<<c[i][j]<<" ";
    //  }cout<<endl;
    //}
    return 0;
}

by CangerYumo @ 2024-06-05 22:27:08

@1004779564bzbjj 你的函数ss没有返回值


by CangerYumo @ 2024-06-05 22:28:05

然后别的暂时没看出来什么问题


by CangerYumo @ 2024-06-05 22:29:28

@1004779564bzbjj 没有返回值的函数类型要写成void


|