#define ll long long
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
using namespace std;
ll n,x,y,t,times[1001][1001],book[1001][1001],ans[1001][1001];
ll head,tail;
struct node{
ll tx,ty;
}f[10001];
ll next[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
int main(){
cin>>n;
memset(times,1e7,sizeof(times));
for(int i=1;i<=n;i++){
cin>>x>>y>>t;
times[x][y]=min(times[x][y],t);
if(x>0)times[x-1][y]=min(times[x-1][y],t);
times[x+1][y]=min(times[x+1][y],t);
if(y>0)times[x][y-1]=min(times[x][y-1],t);
times[x][y+1]=min(times[x][y+1],t);
}
book[0][0]=1;
for(int head=1;head<=tail;head++){
if(times[f[head].tx][f[head].ty]==1e7){
cout<<ans[f[head].tx][f[head].ty];
return 0;
}
for(int i=0;i<4;i++){
ll dx=f[head].tx+next[i][0];
ll dy=f[head].ty+next[i][1];
if(dx>0&&dy>0&&ans[f[head].tx][f[head].ty]+1<times[dx][dy]&&book[dx][dy]==0){
book[dx][dy]=1;
ans[dx][dy]=ans[f[head].tx][f[head].ty]+1;
f[++tail].tx=dx;
f[tail].ty=dy;
}
}
}
cout<<-1;
return 0;
}
有些是借鉴的题解,但是输出是负一