70分代码求调,悬关,T了3个点

P1141 01迷宫

liulechen @ 2024-12-29 13:55:36

#include<bits/stdc++.h>
using namespace std;
long long n,m,s,e,flag[1001][1001],vis[4][2]={-1,0,1,0,0,-1,0,1},v,ans[100001];
char arr[1001][1001];
struct node{
    int x,y,step;
};
queue<node> q;
void bfs(){
    q.push({s,e,0});
    flag[s][e]=v;
    while(!q.empty()){
        for(int i=0;i<4;i++){
            int xx=q.front().x+vis[i][0];
            int yy=q.front().y+vis[i][1];
            if(flag[xx][yy]==0 && xx>=1 && xx<=n && yy>=1 && yy<=n && arr[xx][yy]!=arr[q.front().x][q.front().y]){
                flag[xx][yy]=v;
                q.push({xx,yy,q.front().step+1});
            }
        }
        q.pop();
    }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>arr[i][j];
        }
    }
    while(m--){
        v++;
        cin>>s>>e;
        if(flag[s][e]!=0){
            cout<<ans[v];
            continue;
        }
        bfs();
        long long cnt=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(flag[i][j]){
                    cnt++;
                }
                flag[i][j]=0;
            }
        }
        ans[v]=cnt;
        cout<<cnt<<endl;
    }
}

|