迷宫求调

P1141 01迷宫

Max20121024 @ 2024-05-26 13:18:10

#include<bits/stdc++.h>
using namespace std;
int n,m,maze[1010][1010],dx[4]={1,0,-1,0},dy[4]={0,1,0,-1},color[1010][1010],num[100010],x,y;
char ss;
queue<int> q;
int bfs(int x,int y){
    if(color[x][y]!=0)return num[color[x][y]];
    q.push(x);
    q.push(y);
    int cnt=0;
    while(!q.empty()){
        int ax=q.front();
        q.pop();
        int by=q.front();
        q.pop();
        color[ax][by]=m;
        cnt++;
        for(int i=0;i<4;i++){
            int lx=ax+dx[i];
            int ly=by+dy[i];
            if(lx>0&&lx<=n&&ly>0&&ly<=n&&maze[lx][ly]!=maze[ax][by]&&color[lx][ly]==0){
                q.push(lx);
                q.push(ly);
            }
        }
    }
    return cnt;
}
int dfs(int x,int y,int cnt){
    if(color[x][y]!=0)return num[color[x][y]];
    color[x][y]=m;
    for(int i=0;i<4;i++){
        int lx=x+dx[i];
        int ly=y+dy[i];
        if(lx>0&&lx<=n&&ly>0&&ly<=n&&maze[lx][ly]!=maze[x][y]&&color[lx][ly]==0){
            dfs(lx,ly,cnt+1);
        }
    }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>ss;
            maze[i][j]=ss-'0';
        }
    }
//  for(int i=1;i<=n;i++){
//      for(int j=1;j<=n;j++){
//          cout<<maze[i][j]<<' ';
//      }
//      cout<<endl;
//  }
    while(m--){
        cin>>x>>y;
        cout<<bfs(x,y);
    }
}

感觉像bfs函数if条件判断有点问题

求大神帮忙


|