ju ruo
查看原帖
ju ruo
1029846
simonzzq楼主2023/10/23 20:02

连样例都没过…………

#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;
}	
2023/10/23 20:02
加载中...