最后一个点错了
查看原帖
最后一个点错了
526794
青莲之歌楼主2021/11/12 13:05
#include<bits/stdc++.h>
using namespace std;
int dx[5]={0,0,0,-1,1};
int dy[5]={0,-1,1,0,0};
int m,sx,sy,st,vis[305][305],dry[305][305];
struct data{
	int x,y,t;
}que[90005];
int main(){
	scanf("%d",&m);
	for(int i=0;i<=300;i++)for(int j=0;j<=300;j++)dry[i][j]=-1;
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&sx,&sy,&st);
		for(int j=0;j<5;j++)
		    if(dry[sx+dx[j]][sy+dy[j]]==-1)dry[sx+dx[j]][sy+dy[j]]=st;
		    else dry[sx+dx[j]][sy+dy[j]]=min(dry[sx+dx[j]][sy+dy[j]],st);
	}
	int head=0,tail=1;
	que[head].x=0;
	que[head].y=0;
	que[head].t=0;
	vis[0][0]=1;
	while(head<tail){
		for(int i=1;i<=4;i++){
			int xx=que[head].x,yy=que[head].y,tt=que[head].t+1;
			xx+=dx[i];
			yy+=dy[i];
			if(xx<0||xx>300||yy<0||yy>300||vis[xx][yy])continue;
			if(dry[xx][yy]==-1){
				printf("%d",tt);
				exit(0);
			}
			else if(dry[xx][yy]<=tt)continue;
			que[tail].x=xx;
			que[tail].y=yy;
			que[tail].t=tt;
			vis[xx][yy]=1;
			tail++;
		}
		head++;
	}
	printf("-1");
    return 0;
}
2021/11/12 13:05
加载中...