P2895求助

P2895 [USACO08FEB] Meteor Shower S

Dcchen @ 2024-02-25 22:03:06

#include<iostream>
#include<string.h>
#include<queue>
using namespace std;
const int dx[5]={0,1,0,-1,0},dy[5]={1,0,-1,0,0};
struct ST{
    int x,y,t,pos;
    bool flag;
}map[1005][1005];
int n,x,y,t,tx,ty;
queue<ST> q;
int main(){
    cin>>n;
    for(int i=1;i<=1000;i++){
        for(int j=1;j<=1000;j++){
              map[i][j].x=i;
              map[i][j].y=j;
              map[i][j].flag=0;
              map[i][j].pos=0;
              map[i][j].t=-123456789;
        }
    }
    for(int i=1;i<=n;i++){
        cin>>x>>y>>t;
        for(int j=0;j<5;j++){
            tx=x+dx[j];
            ty=y+dy[j];
            if(tx>=0&&ty>=0){
                if(map[tx][ty].t==-123456789){
                    map[tx][ty].t=t;
                }
                else{
                    map[tx][ty].t=min(map[tx][ty].t,t);
                }
            }
        }
    }
    map[0][0].flag=1;
    q.push(map[0][0]);
    while(!q.empty()){
        ST pos=q.front();
        q.pop();
        if(map[pos.x][pos.y].pos>=map[pos.x][pos.y].t){
            continue;
        }
        for(int i=0;i<5;i++){
            tx=pos.x+dx[i];
            ty=pos.y+dy[i];
            if(tx<0||ty<0||map[tx][ty].flag) continue;
            if(map[tx][ty].t==-12346789){
                cout<<map[tx][ty].pos;
                return 0;
            }
            map[tx][ty].flag=1;
            map[tx][ty].pos=pos.pos+1;
            q.push(map[tx][ty]);
        }
    }
} 

|