0 pts 玄关求调
查看原帖
0 pts 玄关求调
1304502
China_U_19641016楼主2025/7/27 20:39

TLE是可预见的,但全TLE是不可理解的

#include<bits/stdc++.h>
using namespace std;
const int N=2500;
int n,m,qx[N*N],qy[N*N],x,y;
char c[N][N];
bool f,a[N][N],vis[N][N];
int dx[4]={1,0,-1,0};
int dy[4]={0,-1,0,1};
void bfs(int x0,int y0,int x2,int y2){
    int h=0,t=0;
    qx[t]=x0;
    qy[t]=y0;
    t++;
    vis[x0][y0]=1;
    while(h<t){
        int cx=qx[h],cy=qy[h];
        h++;
        for(int i=0;i<4;i++){
            int fx=cx+dx[i],fy=cy+dy[i];
            if(fx>=1&&fx<=n&&fy>=1&&fy<=n&&a[fx][fy]!=a[cx][cy]&&!vis[fx][fy]){
                if(fx==x2&&fy==y2){f=1;return;}
                vis[fx][fy]=1;
                qx[t]=fx;
                qy[t]=fy;
                t++;
            }
        }
    }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>c[i][j];
            a[i][j]=c[i][j]-'0';
        }
    }
    for(int i=1;i<=m;i++){
        cin>>x>>y;
        int t=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(i==x&&j==y) continue;
                bfs(x,y,i,j);
                if(f) t++;
                f=0;
                memset(qx,0,sizeof(qx));
                memset(qy,0,sizeof(qy));
                memset(vis,0,sizeof(vis));
            }
        }
        cout<<t+1<<endl;
    }
    return 0;
}

时间复杂度 O(n2m)O(n^2m),求优化方法!!!

2025/7/27 20:39
加载中...