求问结构化绑定
查看原帖
求问结构化绑定
600441
ZhongYuLin楼主2024/6/11 21:54

bfs 中结构化绑定导致了UKE,这是为什么?(不使用结构化绑定可通过。

#include<bits/stdc++.h>
#define id(x,y) ((x-1)*c+y)
#define pii pair<int,int>
#define se second
#define fi first
using namespace std;
const int N=6e6+3,dx[]={0,-1,0,1,-1,-1,1,1},dy[]={1,0,-1,0,1,-1,1,-1},INF=0x3f3f3f3f;
bitset<N>g,vis;
int f[N],dis[N];
int r,c,n,ans;
queue<pii>q1,q2;
void bfs1(){
    while(!q1.empty()){
        auto &[x,y]=q1.front();q1.pop();
        for(int i=0;i<8;++i){
            int tx=x+dx[i],ty=y+dy[i];
            if(tx<1||tx>r||ty<1||ty>c||vis[id(tx,ty)])continue;
            if(dis[id(x,y)]==0&&dx[i]&&dy[i])continue;
            dis[id(tx,ty)]=dis[id(x,y)]+1;
            vis[id(tx,ty)]=1;
            if(dis[id(tx,ty)]==n)q2.push({tx,ty});
            else q1.push({tx,ty});
        }
    }
}
void bfs2(){
    while(!q2.empty()){
        auto &[x,y]=q2.front();q2.pop();
        q1.push({x,y});dis[id(x,y)]=0;
        // printf("%d %d\n",x,y);
        for(int i=0;i<4;++i){
            int tx=x+dx[i],ty=y+dy[i];
            if(tx<1||tx>r||ty<1||ty>c||vis[id(tx,ty)]||!g[id(tx,ty)])continue;
            q2.push({tx,ty});
            vis[id(tx,ty)]=1;
        }
    }
}
int main(){
    ios::sync_with_stdio(cin.tie(cout.tie(0)));
    int x1,y1,x2,y2;char ch;memset(f,0x3f,sizeof(f));
    cin>>r>>c>>n>>x1>>y1>>x2>>y2;
    for(int i=1;i<=r*c;++i)cin>>ch,g[i]=(ch=='.');
    vis[id(x1,y1)]=1;q2.push({x1,y1});bfs2();
    while(!vis[id(x2,y2)])++ans,bfs1(),bfs2();
    printf("%d\n",ans);
    return 0;
}
2024/6/11 21:54
加载中...