代码如下
#include<bits/stdc++.h>
using namespace std;
struct ew{
int x;
int y;
int te;
};
int n;
int xi[5]={1,0,0,0,-1};
int yi[5]={0,1,0,-1,0};
int maxx;
queue<ew>que;
bool b1[305][305];
int arr1[305][305];
int main(){
// freopen("rainstar.in","r",stdin);
// freopen("rainstar.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
int xl,yl,t;
cin>>xl>>yl>>t;
maxx=max(maxx,t);
for(int j=0;j<=4;j++){
if(xl+xi[j]>=0&&xl+xi[j]<=302&&yl+yi[j]>=0&&yl+yi[j]<302){
if(arr1[xl+xi[j]][yl+yi[j]]!=0){
arr1[xl+xi[j]][yl+yi[j]]=min(arr1[xl+xi[j]][yl+yi[j]],t);
}else{
arr1[xl+xi[j]][yl+yi[j]]=t;
}
}
}
}
ew a1;
a1.x=0;
a1.y=0;
a1.te=0;
que.push(a1);
while(1){
if(que.empty()){
cout<<-1;
return 0;
}
if(arr1[que.front().x][que.front().y]==0){
cout<<que.front().te;
return 0;
}
if(que.front().te>=arr1[que.front().x][que.front().y]&&arr1[que.front().x][que.front().y]!=0){
que.pop();
}else{
for(int i=0;i<=4;i++){
if(que.front().x+xi[i]>=0&&que.front().x+xi[i]<=302&&que.front().y+yi[i]>=0&&que.front().y+yi[i]<=302&&b1[que.front().x+xi[i]][que.front().y+yi[i]]==0){
ew b;
b.x=que.front().x+xi[i];
b.y=que.front().y+yi[i];
b.te=que.front().te+1;
que.push(b);
b1[b.x][b.y]=1;
}
}
que.pop();
}
}
}
救救孩子吧qaq