RE,21pts求条
查看原帖
RE,21pts求条
1035561
guoziqi201010楼主2025/1/22 23:04

代码如下

#include<bits/stdc++.h>
using namespace std;
#define maxn 310
struct coord
{
    int x,y;
};
queue<coord> Q;
int ans[maxn][maxn], death[maxn][maxn];
int wk[4][2] = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
int main()
{
    int m, Ans = 100000;
    memset(ans, -1, sizeof(death));
    memset(death,0x7f,sizeof(death));
    cin>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y,t;
        cin>>x>>y>>t;
#define MIN(x,y,t) if (x>=0&&y>=0) death[x][y] = min(death[x][y],t)
        MIN(x,y,t);
        for(int k=0;k<4;k++)
        {
            MIN(x+wk[k][0],y+wk[k][1],t);
        }
    }
    Q.push((coord){0,0});
    ans[0][0]=0;
    while(!Q.empty())
    {
        coord u=Q.front();
        int ux=u.x,uy=u.y;
        Q.pop();
        for(int k = 0; k < 4; k++)
        {
            int x=ux + wk[k][0];
            int y=uy + wk[k][1];
            if(x < 0 || y < 0 || ans[x][y] != -1 || ans[ux][uy] + 1 >= death[x][y])
            {
                continue;
            }
            ans[x][y] = ans[ux][uy] + 1;
            Q.push((coord){x, y});
        }
    }
    for(int i = 0; i <= 305; i++)
    {
        for(int j = 0; j <= 305;j++)
        {
            if(death[i][j] > 1000 && ans[i][j] != -1)
            {
                Ans = min(Ans, ans[i][j]);
            }
        }
    }
    if(Ans ==100000)
    {
        cout<<-1;
    }
    else
    {
        cout<<Ans;
    }
    return 0;
}
2025/1/22 23:04
加载中...