青莲之歌 @ 2021-11-12 13:05:26
#include<bits/stdc++.h>
using namespace std;
int dx[5]={0,0,0,-1,1};
int dy[5]={0,-1,1,0,0};
int m,sx,sy,st,vis[305][305],dry[305][305];
struct data{
int x,y,t;
}que[90005];
int main(){
scanf("%d",&m);
for(int i=0;i<=300;i++)for(int j=0;j<=300;j++)dry[i][j]=-1;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&sx,&sy,&st);
for(int j=0;j<5;j++)
if(dry[sx+dx[j]][sy+dy[j]]==-1)dry[sx+dx[j]][sy+dy[j]]=st;
else dry[sx+dx[j]][sy+dy[j]]=min(dry[sx+dx[j]][sy+dy[j]],st);
}
int head=0,tail=1;
que[head].x=0;
que[head].y=0;
que[head].t=0;
vis[0][0]=1;
while(head<tail){
for(int i=1;i<=4;i++){
int xx=que[head].x,yy=que[head].y,tt=que[head].t+1;
xx+=dx[i];
yy+=dy[i];
if(xx<0||xx>300||yy<0||yy>300||vis[xx][yy])continue;
if(dry[xx][yy]==-1){
printf("%d",tt);
exit(0);
}
else if(dry[xx][yy]<=tt)continue;
que[tail].x=xx;
que[tail].y=yy;
que[tail].t=tt;
vis[xx][yy]=1;
tail++;
}
head++;
}
printf("-1");
return 0;
}
by 2249450060Z @ 2021-11-22 18:04:44
贝茜可以走出边界,把边界大于300判定删去应该就可以了(至于我为什么知道)
by 青莲之歌 @ 2021-12-05 15:12:23
感谢大佬
by 青莲之歌 @ 2021-12-05 15:18:46
还是有问题呢