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;
}