simonzzq @ 2023-10-23 20:02:22
连样例都没过…………
#include <bits/stdc++.h>
using namespace std;
struct ms{int xi,yi,t;}a[100010];
vector<ms>ss[1010];
struct g{int x,y,t;}l,f;
int n,z[1000][1000],s1[1000][1000];
queue<g>q;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&a[i].xi,&a[i].yi,&a[i].t);
z[a[i].xi][a[i].yi]=
z[a[i].xi+1][a[i].yi]=z[a[i].xi-1][a[i].yi]=
z[a[i].xi][a[i].yi+1]=z[a[i].xi][a[i].yi-1]=1;
ss[a[i].t].push_back(a[i]);
}
l.t=l.x=l.y=0;
q.push(l);
s1[0][0]=-1;
while(!q.empty())
{
f=q.front();
if(s1[f.x][f.y]==1)continue;
if(!z[f.x][f.y])
{
printf("%d",f.t);
return 0;
}
q.pop();
for(auto i:ss[f.t])
s1[i.xi][i.yi]=
s1[i.xi+1][i.yi]=s1[i.xi-1][i.yi]=
s1[i.xi][i.yi+1]=s1[i.xi][i.yi-1]=1;
// for(int i=0;i<=5;i++)
//{
// for(int j=0;j<=5;j++)printf("%d ",s1[i][j]);
// puts("");
// }
puts("");
if(f.x>0&&s1[f.x-1][f.y]==0)
{
l.x=f.x-1,l.y=f.y,l.t=f.t+1;
q.push(l);
s1[l.x][l.y]=-1;
}
if(f.x<500&&s1[f.x+1][f.y]==0)
{
l.x=f.x+1,l.y=f.y,l.t=f.t+1;
q.push(l);
s1[l.x][l.y]=-1;
}
if(f.y>0&&s1[f.x][f.y-1]==0)
{
l.x=f.x,l.y=f.y-1,l.t=f.t+1;
q.push(l);
s1[l.x][l.y]=-1;
}
if(f.y<500&&s1[f.x][f.y+1]==0)
{
l.x=f.x,l.y=f.y+1,l.t=f.t+1;
q.push(l);
s1[l.x][l.y]=-1;
}
}
puts("-1");
return 0;
}