71分求助
查看原帖
71分求助
952865
HDZmessi楼主2023/10/22 16:36
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[3005][3005],vis[3005][3005],d[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
struct node{int x,y;};
struct NODE{node z;int t;};
queue<NODE> Q;
signed main(){
//	freopen("P2895_5.in","r",stdin);
//	freopen("P2895_5_1.out","w",stdout);
	cin>>n;
	memset(a,-1,sizeof a);
	for(int i=1;i<=n;i++){
		int u,v,w;cin>>u>>v>>w;
		u++,v++;
		a[u][v]=w;
		for(int i=0;i<4;i++){
			int x_a=u+d[i][0],y_a=v+d[i][1];
			if(x_a<1||y_a<1) continue;
			if(a[x_a][y_a]==-1) a[x_a][y_a]=w;
			else a[x_a][y_a]=min(a[x_a][y_a],w);
		}
	}
	Q.push({1,1,0});
	vis[1][1]=1;
	while(!Q.empty()){
		NODE u=Q.front();Q.pop();
	//	cerr<<u.z.x<<" "<<u.z.y<<" "<<u.t<<endl;
		if(a[u.z.x][u.z.y]==-1){
			cout<<u.t;
			return 0;
		}
		for(int i=0;i<4;i++){
			int x_a=u.z.x+d[i][0],y_a=u.z.y+d[i][1];
			if(x_a<1||y_a<1||vis[x_a][y_a]||(a[x_a][y_a]<=u.t+1&&a[x_a][y_a]!=-1)) continue;
			vis[x_a][y_a]=1;
			Q.push({x_a,y_a,u.t+1});
		}
	//	cerr<<ans<<endl;
	} 
	cout<<-1;
	return 0;
}
2023/10/22 16:36
加载中...