最后一个点错了

P2895 [USACO08FEB] Meteor Shower S

青莲之歌 @ 2021-11-12 13:05:26

#include<bits/stdc++.h>
using namespace std;
int dx[5]={0,0,0,-1,1};
int dy[5]={0,-1,1,0,0};
int m,sx,sy,st,vis[305][305],dry[305][305];
struct data{
    int x,y,t;
}que[90005];
int main(){
    scanf("%d",&m);
    for(int i=0;i<=300;i++)for(int j=0;j<=300;j++)dry[i][j]=-1;
    for(int i=1;i<=m;i++){
        scanf("%d%d%d",&sx,&sy,&st);
        for(int j=0;j<5;j++)
            if(dry[sx+dx[j]][sy+dy[j]]==-1)dry[sx+dx[j]][sy+dy[j]]=st;
            else dry[sx+dx[j]][sy+dy[j]]=min(dry[sx+dx[j]][sy+dy[j]],st);
    }
    int head=0,tail=1;
    que[head].x=0;
    que[head].y=0;
    que[head].t=0;
    vis[0][0]=1;
    while(head<tail){
        for(int i=1;i<=4;i++){
            int xx=que[head].x,yy=que[head].y,tt=que[head].t+1;
            xx+=dx[i];
            yy+=dy[i];
            if(xx<0||xx>300||yy<0||yy>300||vis[xx][yy])continue;
            if(dry[xx][yy]==-1){
                printf("%d",tt);
                exit(0);
            }
            else if(dry[xx][yy]<=tt)continue;
            que[tail].x=xx;
            que[tail].y=yy;
            que[tail].t=tt;
            vis[xx][yy]=1;
            tail++;
        }
        head++;
    }
    printf("-1");
    return 0;
}

by 2249450060Z @ 2021-11-22 18:04:44

贝茜可以走出边界,把边界大于300判定删去应该就可以了(至于我为什么知道)


by 青莲之歌 @ 2021-12-05 15:12:23

感谢大佬


by 青莲之歌 @ 2021-12-05 15:18:46

还是有问题呢


|