本人是个搜索渣渣,考前练一下
#include<bits/stdc++.h>
using namespace std;
long long k,da[5]={0,1,-1,0,0},db[5]={0,0,0,-1,1};
struct node{
int tim;
int x,y;
}a[50005];
bool cmp(node a,node b)
{
if(a.tim!=b.tim) return a.tim<b.tim;
return a.x<b.x;
}
queue<node> Q;
long long n,ans;
bool vis[305][305],y[305][305];
int main()
{
memset(y,-1,sizeof(y));
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i].tim>>a[i].x>>a[i].y;
sort(a+1,a+1+n,cmp);
node tmp={0,0,0};
Q.push(tmp);
vis[0][0]=true;
while(!Q.empty())
{
node tmp=Q.front();
Q.pop();
int tx=tmp.x,ty=tmp.y;
vis[tx][ty]=true;
for(int i=1;i<=4;i++)
{
if(a[i].tim==ans)
{
y[tx][ty]=true;
for(int i=1;i<=4;i++)
{
int dx=tx+da[i],dy=ty+db[i];
if(!(dx<0 || dy<0 || dx>300 || dy>300 || vis[dx][dy])) y[dx][dy]=true;
}
}
}
if(y[tx][ty]==-1) {cout<<ans;return 0;}
for(int i=1;i<=4;i++)
{
int dx=tx+da[i],dy=ty+db[i];
if(dx<0 || dy<0 || vis[dx][dy]) continue;
Q.push(node{++ans,dx,dy});
vis[dx][dy]=true;
}
}
cout<<-1;
return 0;
}