#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<utility>
using namespace std;
int M,N;
int matrix[305][305];
int clock[305][305];
int dx[]={-1,1,0,0,0},dy[]={0,0,1,-1,0};
int main(){
int i,j,k,m,n,x,y,t;
xxx:while(scanf("%d",&N)==1){
queue<int> que;
memset(matrix,-1,sizeof(matrix));
for(i=0;i<N;i++){
scanf("%d%d%d",&x,&y,&t);
for(j=0;j<=4;j++){
int nx=x+dx[j];
int ny=y+dy[j];
if(nx>=0&&ny>=0){
if(matrix[nx][ny]==-1||matrix[nx][ny]>t){
matrix[nx][ny]=t;
}
}
}
}
if(matrix[0][0]==-1){
printf("0\n");
continue;
}
if(matrix[0][0]!=0){
que.push(0);
clock[0][0]=0;
}
while(!que.empty()){
int t=que.front();
x=t/1000;
y=t%1000;
// if(matrix[x][y]==-1)break;
for(i=0;i<4;i++){
int nx=dx[i]+x;
int ny=y+dy[i];
if(nx>=0&&ny>=0){
if(matrix[nx][ny]==-1){
printf("%d\n",clock[x][y]+1);
goto xxx;
}
if(matrix[nx][ny]>clock[x][y]+1){
que.push(nx*1000+ny);
clock[nx][ny]=clock[x][y]+1;
matrix[nx][ny]=0;
}
}
}
que.pop();
}
printf("-1\n");
}
return 0;
}
poj3669
最新推荐文章于 2020-05-04 12:10:45 发布