21分,只对前三个点,求救
查看原帖
21分,只对前三个点,求救
773357
ZeroDifference楼主2024/11/21 20:27
#include<iostream>
#include<queue>
using namespace std;
const int N=410;
int m;
struct pos{
	int x,y,t;
};
int dx[4]={1,-1,0,0};
int dy[4]={0,0,-1,1};
bool vis[N][N][1010];
bool fall[N][N][1010];
bool unsafe[N][N];
queue<pos> q;
int main()
{
	scanf("%d",&m);
	for(int i=1;i<=m;i++)
	{
		int x,y,t;
		scanf("%d%d%d",&x,&y,&t);
		fall[x][y][t]=1;
		unsafe[x][y]=1;
		for(int i=0;i<4;i++)
		{
			int tx=x+dx[i],ty=y+dy[i];
			if(tx>=0&&ty>=0)
			{
				fall[tx][ty][t]=1;
				unsafe[tx][ty]=1;
			}
		}
	}
	if(fall[0][0][1])
	{
		puts("-1");
		return 0;
	}
	q.push({0,0,0});
	vis[0][0][0]=true;
//	vis[0][0][1]=true;
	while(!q.empty())
	{
		pos tmp=q.front();
		q.pop();
		for(int i=0;i<4;i++)
		{
			pos tp={tmp.x+dx[i],tmp.y+dy[i],tmp.t+1};
			if(tp.x>=0&&tp.y>=0)
				if(!fall[tp.x][tp.y][tp.t])
					if(!vis[tp.x][tp.y][tp.t])
					{
						vis[tp.x][tp.y][tp.t]=true;
						if(!unsafe[tp.x][tp.y])
						{
							printf("%d\n",tp.t);
							return 0;
						}
						
						q.push(tp);
					}
		}
	}
	puts("-1");
	return 0;
}
2024/11/21 20:27
加载中...