代码:
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;
const int N=310;
const int M=1e5+5;
int m;
int v[N][N];
int x[N],y[N],step[N];
int ans=INF;
int d[4][2]={{-1,0},{0,-1},{0,1},{1,0}};
void bfs(){
int head=1,tail=1;
if(v[0][0]==-1){
cout<<0;
return;
}
while(head<=tail){
for(int i=0;i<4;i++){
int nx=x[head]+d[i][0];
int ny=y[head]+d[i][0];
if(nx>=0&&nx<=303&&ny>=0&&ny<=303&&step[head]+1<v[nx][ny]){
tail++;
x[tail]=nx;
y[tail]=ny;
step[tail]=step[head]+1;
if(v[nx][ny]==-1) ans=min(ans,step[head]+1);
v[nx][ny]=1;
}
}
head++;
}
if(ans!=INF) cout<<ans;
else cout<<-1;
}
int main(){
cin>>m;
memset(v,-1,sizeof(v));
for(int i=1;i<=m;i++){
int x,y,t;
cin>>x>>y>>t;
v[x][y]=min(v[x][y],t);
for(int i=0;i<4;i++){
int nx=x+d[i][0];
int ny=y+d[i][1];
if(nx>=0&&nx<=305&&ny>=0&&ny<=305){
v[nx][ny]=min(v[nx][ny],t);
}
}
if(v[0][0]==0){
cout<<-1;
return 0;
}
}
bfs();
return 0;
}