求助
查看原帖
求助
220362
chenxuanting楼主2020/10/25 09:57
 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
typedef unsigned long long ll;
int m;
int x,y,t;
int safe[305][305];
int vis[305][305];
int dx[5]={1,-1,0,0,0};
int dy[5]={0,0,1,-1,0};
int ans=-1;
struct node
{
	int x,y,t;
};
void bfs()
{
	queue<node> q;
	q.push((node){0,0,0});
	vis[0][0]=1;
	while(!q.empty()){
		node cur=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			int ax=dx[i]+cur.x;
			int ay=dy[i]+cur.y;
			if(ax<0||ay<0){
				continue;
			}
			if(safe[ax][ay]==0x3f){
				ans=cur.t+1;
				return;
			}
			if(safe[ax][ay]<=cur.t+1){
				continue;
			}
			if(vis[ax][ay]==1){
				continue;
			}
			vis[ax][ay]=1;
			q.push((node){ax,ay,cur.t+1});
		}
	}
} 
int main()
{
	cin>>m;
	memset(safe,0x3f,sizeof(safe));
	for(int i=1;i<=m;i++){
		cin>>x>>y>>t;
		for(int i1=0;i1<=4;i1++){
			int ax=dx[i1]+x;
			int ay=dy[i1]+y;
			if(ax<0||ay<0){
				continue;
			}
			if(safe[ax][ay]>t){
				safe[ax][ay]=t;
			}
		}
	}
	if(safe[0][0]==0){
		cout<<"-1";
		return 0;
	}
	bfs();
	cout<<ans;
    return 0;
}


2020/10/25 09:57
加载中...