rt,用上 O2 MLE,不用TLE.
#include <bits/stdc++.h>
using namespace std;
int mp[302][302],m,p[]={0,0,-1,1},q[]={-1,1,0,0},jm[302][302],v[302][302],ii[1001];
struct Node{
int x,y,t;
}k[50001];
void bfs(){
queue<Node>a;
a.push((Node){0,0,0});
while(a.size()){
Node u=a.front();a.pop();
if(jm[u.x][u.y]==0){
cout<<u.t;
return;
}
if(ii[u.t]==0){
for(int i=1;i<=m;i++){
if(u.t==k[i].t){
for(int l=0;l<4;l++){
int ux=k[i].x+p[l],uy=k[i].y+q[l];
if(ux>=0&&ux<=301&&uy>=0&&uy<=301)mp[ux][uy]=1;
}
mp[k[i].x][k[i].y]=1;
}
}
ii[u.t]=1;
}
if(mp[u.x][u.y]==1)continue;
for(int i=0;i<4;i++){
int xi=u.x+p[i],yi=u.y+q[i];
if(mp[xi][yi]==0&&xi>=0&&xi<=301&&yi>=0&&yi<=301&&v[xi][yi]==0)a.push((Node){xi,yi,u.t+1});
}
v[u.x][u.y]=1;
}
cout<<-1;
}
int main(){
cin>>m;
for(int i=1;i<=m;i++){
cin>>k[i].x>>k[i].y>>k[i].t;
for(int l=0;l<4;l++){
int ux=k[i].x+p[l],uy=k[i].y+q[l];
if(ux>=0&&ux<=301&&uy>=0&&uy<=301)jm[ux][uy]=1;
}
jm[k[i].x][k[i].y]=1;
}
bfs();
return 0;
}