lingquan @ 2024-09-24 17:23:20
代码如下\ 不知道为什么,搜的点似乎压不进队列
#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
by lingquan @ 2024-09-30 18:56:11
已过