71分求助
查看原帖
71分求助
1269111
Eden_star楼主2025/2/8 17:32
using namespace std;
int n,m,ans=1e9;
int pic[1010][1010];
int vis[1010][1010];
int fx[4][2]={{1,0},{0,-1},{0,1},{-1,0}};
queue<pair<int ,int > > q;
int main(){
	int t;
	cin>>t;
	for(int i=0;i<=1000;i++){
		for(int j=0;j<=1000;j++){
			pic[i][j]=-1;
		}
	}
	for(int i=1;i<=t;i++){
		int x,y,tx;
		cin>>x>>y>>tx;
		pic[x][y]=tx;
		for(int i=0;i<4;i++){
			int xx=x+fx[i][0];
			int yy=y+fx[i][1];
			if(xx>=0&&yy>=0){
				if(pic[xx][yy]!=-1) pic[xx][yy]=min(pic[xx][yy],tx);
				else pic[xx][yy]=tx;
			}
		}
		n=max(x,n);
		m=max(y,m);
	}
	n++;m++;
	n++;m++;
	memset(vis,0,sizeof(vis));
	q.push(make_pair(0,0));
	while(!q.empty()){
		int x=q.front().first;
		int y=q.front().second;
		int tt=vis[x][y]+1;
		q.pop();
		for(int i=0;i<4;i++){
			int xx=x+fx[i][0];
			int yy=y+fx[i][1];
			if(!vis[xx][yy]&&(tt<pic[xx][yy]||pic[xx][yy]==-1)&&xx>=0&&yy>=0&&xx<=n&&y<=m){
				vis[xx][yy]=tt;
				q.push(make_pair(xx,yy));
			}
		}
	}
//	cout<<"\n";
	for(int i=0;i<=n;i++){
		for(int j=0;j<=m;j++){
//			cout<<setw(3)<<vis[i][j]<<" ";
			if(vis[i][j]&&pic[i][j]==-1) ans=min(ans,vis[i][j]);
		}//cout<<"\n";
	}//cout<<"\n";
/*	for(int i=0;i<=n;i++){
		for(int j=0;j<=n;j++){
			cout<<setw(3)<<pic[i][j]<<" ";
		}cout<<"\n";
	}cout<<"\n";*/
	if(ans==1e9) cout<<-1;
	else cout<<ans;
}```
2025/2/8 17:32
加载中...