71pts求助
查看原帖
71pts求助
351679
shaun2000楼主2024/7/30 10:03

record

#include <bits/stdc++.h>

using namespace std;

struct graph
{
    int t=1e9;
    bool v=0;
};
graph g[320][320];
const int xw[4]= {-1,1,0,0},yw[4]= {0,0,1,-1};
int ans[320][320];
queue <int> qx,qy;
bool book[320][320];
int main()
{

    int m;
    scanf("%d",&m);
    for(int i=1; i<=m; i++)
    {
        int x,y,ti;
        scanf("%d%d%d",&x,&y,&ti);
        g[x][y].v=1;
        g[x][y].t=ti;
        for(int i=0;i<=3;i++)
        {
            int nx=x+xw[i],ny=y+yw[i];
            if(nx<0 || ny<0)
                continue;
            g[nx][ny].v=1;

            g[nx][ny].t = min(g[nx][ny].t,ti);

        }
    }

    bool flag=true;
    book[0][0]=1;
    ans[0][0]=0;
    qx.push(0);
    qy.push(0);
    if(g[0][0].v==0)
    {
        cout<<0;
        return 0;
    }
    //printf("\n");
    while(!qx.empty())
    {

        int sx=qx.front(),sy=qy.front();//printf("%d %d\n",sx,sy);
        qx.pop();
        qy.pop();
        for(int i=0; i<4; i++)
        {
            int nx=sx+xw[i],ny=sy+yw[i];
            if(nx>=0 && ny>=0 && book[nx][ny]==0)
            {
                if(g[nx][ny].v==0)
                {
                    //printf("%d %d\n",nx,ny);
                    cout<<ans[sx][sy]+1;
                    return 0;
                }
                else if(g[nx][ny].t>ans[sx][sy]+1)
                {
                    ans[nx][ny]=ans[sx][sy]+1;
                    qx.push(nx);
                    qy.push(ny);
                    book[nx][ny]=1;
                }
            }
        }


    }
    printf("-1");



    return 0;
}
2024/7/30 10:03
加载中...