#14,一关注

P2895 [USACO08FEB] Meteor Shower S

董承文 @ 2023-11-11 22:00:41

#include<bits/stdc++.h>
using namespace std;
int n,a[310][310],X[4]={-1,0,1,0},Y[4]={0,1,0,-1},ans,vis[310][310];
struct node
{
    int x,y,step;
};
queue<node>q;

int main()
{
    cin>>n;
    for(int i=0;i<=305;i++)
        for(int j=0;j<=305;j++)
            a[i][j]=1e9;
    for(int i=1;i<=n;i++)
    {
        int x,y,t;
        cin>>x>>y>>t;
        a[x][y]=min(a[x][y],t);
        for(int j=0;j<4;j++)
        {
            int xx=x+X[j],yy=y+Y[j];
            if(xx>=0&&yy>=0)
                a[xx][yy]=min(a[xx][yy],t);
        }
    }
    if(a[0][0]!=0&&a[0][1]!=1&&a[1][0]!=1)
    {
        node t;
        t.x=0,t.y=0,t.step=0;
        q.push(t);
    }
    vis[0][0]=1;
    while(!q.empty())
    {
        node t;
        t=q.front();
        q.pop();
        //cout<<t.x<<' '<<t.y<<' '<<t.step<<endl;
        for(int i=0;i<4;i++)
        {
            int xx=t.x+X[i],yy=t.y+Y[i];
            if(xx>=0&&yy>=0&&vis[xx][yy]==0&&a[xx][yy]>t.step+1)
            {
                if(a[xx][yy]==1e9)
                {
                    cout<<t.step+1;
                    return 0;
                }
                vis[xx][yy]=1;
                node tt;
                tt.x=xx,tt.y=yy,tt.step=t.step+1;
                q.push(tt);
            }
        }
    }
    cout<<-1;
    return 0;
}

by _txb_ @ 2023-11-11 22:23:28

见这里


|