如果你使用bfs时MLE了,请在将坐标入队时将vis置为true,而不是在出队时置为true。具体如下
while(!q.empty()){
int ux=q.front().fi,uy=q.front().se;q.pop();
vis[ux][uy]=1;
for(int i=0;i<4;i++){
int vx=ux+walk[i][0],vy=uy+walk[i][1];
if(vx<1 || vy<1 || vx>n || vy>m)continue;
if(vis[vx][vy])continue;
if(res<=dis(st,mp(vx,vy)))continue;
if(s[vx][vy]=='x')res=dis(st,mp(vx,vy));
q.push(mp(vx,vy));
}
}
这段代码会MLE100pts
while(!q.empty()){
int ux=q.front().fi,uy=q.front().se;q.pop();
for(int i=0;i<4;i++){
int vx=ux+walk[i][0],vy=uy+walk[i][1];
if(vx<1 || vy<1 || vx>n || vy>m)continue;
if(vis[vx][vy])continue;
if(res<=dis(st,mp(vx,vy)))continue;
if(s[vx][vy]=='x')res=dis(st,mp(vx,vy));
vis[vx][vy]=1;
q.push(mp(vx,vy));
}
}
这段代码则可以AC
具体原因应该是前者会有不少相同的元素在队列里,从而爆空间(猜测)