7分 样例都没过求调
查看原帖
7分 样例都没过求调
1021623
AVLw楼主2023/11/27 12:29

自己弄不明白了 回关注 感谢

#include <iostream>
#include <cstdio>
#include<cstring>
using namespace std;

const int N=444;
int g[N][N],lim[N][N];
int dx[5]={0,0,0,-1,1};
int dy[5]={0,-1,1,0,0};
bool vis[N][N];
struct P{
	int x,y,t;
};

P q[N];

int main() {
	int m;
	cin>>m;
	memset(lim,0x3f,sizeof(lim));
	for(int i=0;i<m;i++){
		int x,y,t;
		cin>>x>>y>>t;
		for(int j=0;j<5;j++){
			int nx=x+dx[j];
			int ny=y+dy[j];
			if(nx>=0&&ny>=0){
				lim[nx][ny]=min(t,lim[nx][ny]);
			}
		}
	}
	int l=0,r=0;
	q[r++]={0,0,0};
	vis[0][0]=true;
	while(l<r){
		auto cur=q[l++];
		int x=cur.x;
		int y=cur.y;
		int t=cur.t;
		if(lim[x][y]==0x3f3f3f){
			cout<<t;
			return 0;
		}
		for(int i=0;i<5;i++){
			int nx=x+dx[i];
			int ny=y+dy[i];
			int nt=t+1;
			if(nx>=0&&ny>=0&&nt<lim[nx][ny]&&!vis[nx][ny]){
				vis[nx][ny]=true;
				q[r++]={nx,ny,nt};
				cout<<nx<<" "<<ny<<endl;
			}
		}
	}
	cout<<-1;

	return 0;
}
2023/11/27 12:29
加载中...