蒟蒻求调
查看原帖
蒟蒻求调
893704
lingquan楼主2024/9/24 17:23

代码如下
不知道为什么,搜的点似乎压不进队列

#include <bits/stdc++.h>
using namespace std;
int M;
bool b[1005][1005];
bool die[1005][1005];
int dx[5]={0,0,1,-1};
int dy[5]={1,-1,0,0};
int ans=-1;

struct node{
	int x,y,t;
}a[50005];

bool cmp(node a,node b){
	return a.t<b.t?a.t<b.t:a.x<b.x;
}

void bfs(){
	int now=0;
	queue<node> q;
	q.push({0,0,0});
	b[0][0]=1;
	while(q.size()){
		node p=q.front();
		q.pop();
		while(a[now].t==p.t){
			b[a[now].x][a[now].y]=1;
			for(int i=0;i<4;i++){
				int x=a[now].x+dx[i],y=a[now].y+dy[i];
				if(x>=0 && y>=0){
					b[x][y]=1;
				}
			}
			now++;
		}
//		for(int i=0;i<=5;i++){
//			for(int j=0;j<=5;j++){
//				cout<<die[i][j]<<" ";
//			}
//			cout<<endl;
//		}
//		cout<<endl;
		for(int i=0;i<4;i++){
			int x=p.x+dx[i];
			int y=p.y+dy[i];
			if(b[x][y]==0 && x>=0 && y>=0){
				if(die[x][y]==0){
					ans=p.t;
					return;
				}
				q.push({x,y,p.t+1});
				b[x][y]=1;
			}
		}
	}
	return;
}

int main(){
	scanf("%d",&M);
	for(int i=1;i<=M;i++){
		scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].t);
		die[a[i].x][a[i].y]=1;
		for(int j=0;j<4;j++){
			int x=a[i].x+dx[j];
			int y=a[i].y+dy[j];
			if(x>=0 && y>=0){
				die[x][y]=1;
			}
		}
	}
	sort(a+1,a+1+M,cmp);
	bfs();
	printf("%d",ans);
	return 0;
}
```cd
2024/9/24 17:23
加载中...