#include<bits/stdc++.h>
using namespace std;
int m,x,y,t,g[305][305],f[305][305],visit[305][305];
struct zb{
int x,y;
};
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
queue<zb> q;
cin>>m;
for(int i=0;i<=304;i++)
for(int j=0;j<=304;j++)
g[i][j]=-1;
for(int i=1;i<=m;i++)
{
cin>>x>>y>>t;
if(g[x][y]==-1||g[x][y]>t)
g[x][y]=t;
if(g[x+1][y]==-1||g[x+1][y]>t)
g[x+1][y]=t;
if(g[x][y+1]==-1||g[x][y+1]>t)
g[x][y+1]=t;
if(x-1>=0)
if(g[x-1][y]==-1||g[x-1][y]>t)
g[x-1][y]=t;
if(y-1>=0)
if(g[x][y-1]==-1||g[x][y-1]>t)
g[x][y-1]=t;
/*for(int k=0;k<=5;k++)
{
for(int j=0;j<=5;j++)
printf("%-4d",g[k][j]);
cout<<endl;
}*/
}
zb now;
now.x=0;now.y=0;
q.push(now);
visit[0][0]=1;
int xx,yy;
while(!q.empty())
{
now=q.front();
q.pop();
xx=now.x,yy=now.y;
//cout<<"坐标:"<<xx<<" "<<yy<<"步数:"<<f[xx][yy]<<"\n";
if(g[xx][yy]==-1)
{
// cout<<"\n跳出\n";
break;
}
if(f[xx][yy]<g[xx+1][yy]-1&&!visit[xx+1][yy]||g[xx+1][yy]==-1)
{
visit[xx+1][yy]=1;
zb tmp;
tmp.x=xx+1;tmp.y=yy;
q.push(tmp);
f[xx+1][yy]=f[xx][yy]+1;
// cout<<"下\n";
}
if(xx-1>=0)
if(f[xx][yy]<g[xx-1][yy]-1&&!visit[xx-1][yy]||g[xx-1][yy]==-1)
{
visit[xx][yy+1]=1;
zb tmp;
tmp.x=xx;tmp.y=yy;
q.push(tmp);
f[xx-1][yy]=f[xx][yy]+1;
// cout<<"上\n";
}
if(f[xx][yy]<g[xx][yy+1]-1&&!visit[xx][yy+1]||g[xx][yy+1]==-1)
{
visit[xx-1][yy]=1;
zb tmp;
tmp.x=xx;tmp.y=yy+1;
q.push(tmp);
f[xx][yy+1]=f[xx][yy]+1;
// cout<<"右\n";
}
if(yy-1>=0)
if(f[xx][yy]<g[xx][yy-1]-1&&!visit[xx][yy-1]||g[xx][yy-1]==-1)
{
visit[xx][yy-1]=1;
zb tmp;
tmp.x=xx;tmp.y=yy-1;
q.push(tmp);
f[xx][yy-1]=f[xx][yy]+1;
// cout<<"左\n";
}
}
if(g[xx][yy]==-1)
cout<<f[xx][yy];
else
cout<<-1;
return 0;
}
debug时候的注释没删,请忽略