93分第三个测试点过不了!!!求大佬帮助

P2895 [USACO08FEB] Meteor Shower S

fanyuchen2010 @ 2023-04-04 18:42:00

#include<bits/stdc++.h>
using namespace std;
int m;
int mp[305][305];
bool v[305][305]; 
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
struct node{
    int x,y,step;
};
void BFS(){
    v[0][0]=true;
    queue<node>q;
    node k;
    k.step=0;
    k.x=0;
    k.y=0;
    q.push(k);
    while(q.size()){
        node r=q.front();
        q.pop();
        for(int i=0;i<4;i++){
            int ddx=dx[i]+r.x;
            int ddy=dy[i]+r.y;
            if(ddx>=0&&ddy>=0&&ddx<=301&&ddy<=301&&(r.step+1<mp[ddx][ddy]||mp[ddx][ddy]==0)&&!v[ddx][ddy]){
                if(!mp[ddx][ddy]){
                    cout<<r.step+1;
                    return;
                }
                v[ddx][ddy]=true;
                k.step=r.step+1;
                k.x=ddx;
                k.y=ddy;
                q.push(k);
            }
        }
    }
    cout<<-1;
}
int main(){
    cin>>m;
    int a,b,c;
    for(int i=1;i<=m;i++){
        cin>>a>>b>>c;
        if(mp[a][b])mp[a][b]=min(mp[a][b],c);
        else mp[a][b]=c;
        for(int j=0;j<4;j++){
            int da=a+dx[j];
            int db=b+dy[j];
            if(da>=0&&db>=0){
                if(mp[da][db])mp[da][db]=min(mp[da][db],c);
                else mp[da][db]=c;
            } 
        }
    }
    BFS();
    return 0;
} 

by sjyh_jy @ 2023-05-26 22:53:49

第三个数据: 5 0 0 2 3 0 0 1 2 5 2 2 4 1 4 4

我发现我的代码认为0是没落过陨石的,看来要改一下初值了。

不知道你是不是同样的问题。


by wangjunzhe7 @ 2023-08-18 19:09:35

我也是同样的问题。

我发现我的代码在时间为0的时候落陨石赋值是0,而可以走的时候赋值也是0

重复了


|