如果你MLE
查看原帖
如果你MLE
225484
Kent999楼主2023/11/16 21:29

如果你使用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

具体原因应该是前者会有不少相同的元素在队列里,从而爆空间(猜测)

2023/11/16 21:29
加载中...