71分,5、9、12、14WA求助。

P2895 [USACO08FEB] Meteor Shower S

toolong114514 @ 2023-03-04 14:06:49

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int INF=0x3f3f3f3f;
struct pt{
    int px,py,t;
};
queue<pt> q;
int tx[5]={0,0,-1,1};
int ty[5]={-1,1,0,0};
int map[500][500];
int vst[500][500];
int m,ans=-1;
bool flag;
void bfs(){
    while(!q.empty()){
        pt now=q.front();
        if(map[now.px][now.py]==INF){
            ans=now.t;
            break;
        }
        for(int i=0;i<4;i++){
            pt nxt;
            nxt.px=now.px+tx[i];
            nxt.py=now.py+ty[i];
            nxt.t=now.t+1;
            if(nxt.px>=0&&nxt.px<=450&&nxt.py>=0&&nxt.py<=450&&nxt.t<map[nxt.px][nxt.py]&&vst[nxt.px][nxt.py]==0){
                vst[nxt.px][nxt.py]=1;
                q.push(nxt);
                //cout<<nxt.px<<" "<<nxt.py<<endl;
            }
        }
        q.pop();
    }
}
int main(){
    memset(map,INF,sizeof(map));
    cin>>m;
    while(m--){
        int sx,sy,st;
        cin>>sx>>sy>>st;
        map[sx][sy]=st;
        for(int i=0;i<4;i++){
            if(sx+tx[i]<0||sy+ty[i]<0) continue;
            map[sx+tx[i]][sy+ty[i]]=min(st,map[sx+tx[i]][sy+ty[i]]);
        }
    }
    pt start{0,0,0};
    q.push(start);
    vst[0][0]=1;
    bfs();
    cout<<ans;
    return 0;   
}

by HuangJingYun @ 2023-04-01 15:19:07

int sx,sy,st;
        cin>>sx>>sy>>st;
        if(map[sx][sy]==INF)//说明改位置未被流星砸过
        {
            map[sx][sy]=st;
        }
        else//说明该位置被流星砸过,要取st的最小值
        {
            map[sx][sy] = min(map[sx][sy],st);
        }
        for(int i=0;i<4;i++){
            if(sx+tx[i]<0||sy+ty[i]<0) continue;
             map[sx+tx[i]][sy+ty[i]]=min(st,map[sx+tx[i]][sy+ty[i]]);
        }

by toolong114514 @ 2023-04-02 19:02:07

@HuangJingYun 谢谢


|