90pts求救

P1141 01迷宫

wahe @ 2024-07-15 16:46:45

3 TLE

#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
int n, m;
int ma[1005][1005], vis[1005][1005], bm[1005][1005];
int xx[4]={1, -1, 0, 0};
int yy[4]={0, 0, 1, -1};
int ans=0;
bool check(int x, int y){
    return x >= 1 && x <= n && y >= 1 && y <= n && !vis[x][y];
}
typedef pair <int, int> p;
queue <p> xy;
queue <p> biao;
void bfs(int x, int y){
    vis[x][y] = 1;
    xy.push({x, y});
    while(!xy.empty()){
        ans += 1;
        int ux = xy.front().fi;
        int uy = xy.front().se;
        xy.pop();
        for(int i=0; i<4; i++){
            int tx = ux+xx[i];
            int ty = uy+yy[i];
            if(check(tx, ty) && (ma[tx][ty] != ma[ux][uy])){
                vis[tx][ty] = 1;
                xy.push({tx, ty});
                biao.push({tx, ty});
            }   
        }
    }
}
int main(){
    cin >> n >> m;
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            char c;
            cin >> c;
            ma[i][j] = c-'0';
        }
    }
    for(int i=1; i<=m; i++){

        int a, b;
        cin >> a >> b;
        if(!bm[a][b]){
            bfs(a, b);
            cout << ans << endl;
            while(!biao.empty()){
                int x = biao.front().fi;
                int y = biao.front().se;
                bm[x][y] = ans; 
                biao.pop();

            }
            ans = 0;
            memset(vis, 0, sizeof vis);
        } else{
            cout << bm[a][b] << endl;
        }
    }
    return 0;
}

by csyc5586 @ 2024-07-15 16:52:27

@LiShouyi 看得出来是复杂度太高了,得调整代码。其实可以不用那么复杂,可惜我不是大佬改不来代码所以我可以帮你点下错误但是改不来。你就耐心等等大佬来帮你改一改


by wahe @ 2024-07-15 19:17:29

@csyc5586 谢谢


by MY_csp_s @ 2024-07-17 20:26:34

@LiShouyi 有几个可以优化的点 1.你可以尝试用数组模拟一下queue,stl的queue很慢 2.你可以离线处理,把所有可能结果存进一个数组里,最后在读入询问、输出,不用memset那么多次了(你把memset注释掉就会发现第三个点接近0.8s都花在了memset上,其他步骤只花了195ms)


by MY_csp_s @ 2024-07-17 20:47:50

@LiShouyi 我改的代码


by MY_csp_s @ 2024-07-17 21:00:34

@LiShouyi 希望我的代码能对您有用


by wahe @ 2024-07-18 08:30:22

@MY_csp_s 谢谢,已经解决了


by _Kimi_ @ 2024-07-20 13:47:52

@LiShouyi 捉


by wahe @ 2024-07-20 16:47:55

@Kimi 。。。


|