#include<bits/stdc++.h>
using namespace std;
int m,visi[550][550],safe[550][550],ways[4][2]={{1,0},{-1,0},{0,1},{0,-1}},x,y,t,ans=0x7fffffff;
struct node{
int xx,yy,steps;
};
queue<node>q;
int bfs()
{
node now,nex;
now.xx=0,now.yy=0,now.steps=0;
visi[0][0]=0;
q.push(now);
while(!q.empty()){
now=q.front();
q.pop();
if(safe[now.xx][now.yy]==0x7f7f7f7f)
return ans=now.steps;
for(int i=0;i<4;i++){
if(now.xx+ways[i][0]>=0&&now.xx+ways[i][0]<=500&&now.yy+ways[i][1]>=0&&now.yy+ways[i][1]<=500){
nex.xx=now.xx+ways[i][0],nex.yy=now.yy+ways[i][1],nex.steps=now.steps+1;
if(safe[nex.xx][nex.yy]>nex.steps&&visi[nex.xx][nex.yy]){
q.push(nex);
visi[nex.xx][nex.yy]=0;
}
}
}
}
}
signed main()
{
scanf("%d",&m);
for(int i=0;i<=500;i++)
for(int j=0;j<=500;j++)
visi[i][j]=1;
memset(safe,0x7f,sizeof(safe));
for(int j=1;j<=m;j++)
{
scanf("%d%d%d",&x,&y,&t);
safe[x][y]=min(safe[x][y],t);
for(int i=0;i<4;i++)
if(x+ways[i][0]>=0&&x+ways[i][0]<=500&&y+ways[i][1]>=0&&y+ways[i][1]<=500)
safe[x+ways[i][0]][y+ways[i][1]]=min(safe[x+ways[i][0]][y+ways[i][1]],t);
}
bfs();
if(ans==0x7fffffff)
cout<<-1;
else
cout<<ans;
return 0;
}
第二个点莫名其妙的 RE 了
输出是对,在线求调