7分回关
查看原帖
7分回关
1321274
Zivsfamily楼主2024/7/30 17:57
#include<bits/stdc++.h>

using namespace std;
typedef pair<int, int> pii;
typedef pair<pii, int> piii;

const int dx[]={0,0,0,-1,1};
const int dy[]={0,-1,1,0,0};
const int MAXN=303;

int meteor[MAXN][MAXN];
int vis[MAXN][MAXN];
int m,ans=-1;
queue<piii> q;

int main(){
	memset(vis,-1,sizeof vis);
	for(int i=0;i<MAXN;++i){
		for(int j=0;j<MAXN;++j){
			meteor[i][j]=1001;
		}
	}
	scanf("%d",&m);
	int a,b,c;
	for(int i=1;i<=m;++i){
		scanf("%d%d%d",&a,&b,&c);
		for(int j=0;j<4;++j){
			meteor[a-dx[j]][b-dy[j]]=min(meteor[a-dx[j]][b-dy[j]],c);
		}
	}
	q.push(piii(pii(0,0), 0));
	vis[0][0]=0;
	while (!q.empty()) {
		piii u = q.front();
		q.pop();
		int x = u.first.first, y = u.first.second;
		int dis = u.second;
		for (int k = 1; k <= 4; ++k) {
			int newx = x + dx[k];
			int newy = y + dy[k];
			if(newx<0||newy<0||vis[newx][newy]!=-1||meteor[newx][newy]<=dis)
				continue;
			q.push(piii(pii(newx, newy), dis + 1));
			vis[newx][newy]=0;
			ans==max(dis,ans);
		}
		if(meteor[x][y]==1001){
			break;
		}
	}
	printf("%d\n",ans);
	return 0;
}
2024/7/30 17:57
加载中...