这个题是不有bug?
查看原帖
这个题是不有bug?
500642
一个老实人楼主2021/7/13 14:51
#include <bits/stdc++.h>
using namespace std;
const int N=310;
int res=10000;
struct node
{
    int x,y;
};
queue<node>q;
int mp[N][N],ans[N][N];
int dx[5]={0,0,0,-1,1},dy[5]={0,1,-1,0,0};
int main()
{
    int n;
    memset(ans,-1,sizeof ans);
    memset(mp,0x7f,sizeof mp);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int sx,sy,st;
        cin>>sx>>sy>>st;
        for(int j=0;j<=4;j++)
        {
            int ix=sx+dx[j],iy=sy+dy[j];
            if(ix>=0&&iy>=0)
                mp[ix][iy]=min(mp[ix][iy],st);
        }
    }
    q.push({0,0});
    ans[0][0]=0;
    while(!q.empty())
    {
        node t=q.front();
        q.pop();
        for(int i=1;i<=4;i++)
        {
            int ix=t.x+dx[i],iy=t.y+dy[i];
            if(ix<0 || iy<0 || ans[ix][iy]!=-1 || ans[t.x][t.y]+1>=mp[ix][iy])
                continue;
            ans[ix][iy]=ans[t.x][t.y]+1;
            q.push({ix,iy});
        }
    }
    for(int i=0;i<=305;i++)
    {
        for(int j=0;j<=305;j++)
        {
            if(mp[i][j]>10000 && ans[i][j]!=-1)
                res=min(res,ans[i][j]);
        }
    }
    if(res==10000)
        cout<<"-1";
    else
        cout<<res;
    return 0;
}

//这个怎么也过不了一直re 但是下面这个就能过非常奇怪

#include <bits/stdc++.h>
using namespace std;
const int N=310;
int res=10000;
struct node
{
    int x,y;
};
queue<node>q;
int ans[N][N],mp[N][N];
int dx[5]={0,-1,1,0,0},dy[5]={0,0,0,1,-1};
int main()
{
    int n;
    memset(ans,-1,sizeof ans);
    memset(mp,0x7f,sizeof mp);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int sx,sy,st;
        cin>>sx>>sy>>st;
        for(int j=0;j<=4;j++)
        {
            int ix=sx+dx[j],iy=sy+dy[j];
            if(ix>=0&&iy>=0)
                mp[ix][iy]=min(mp[ix][iy],st);
        }
    }
    q.push({0,0});
    ans[0][0]=0;
    while(!q.empty())
    {
        node t=q.front();
        q.pop();
        for(int i=1;i<=4;i++)
        {
            int ix=t.x+dx[i],iy=t.y+dy[i];
            if(ix<0 || iy<0 || ans[ix][iy]!=-1 || ans[t.x][t.y]+1>=mp[ix][iy])
                continue;
            ans[ix][iy]=ans[t.x][t.y]+1;
            q.push({ix,iy});
        }
    }
    for(int i=0;i<=305;i++)
    {
        for(int j=0;j<=305;j++)
        {
            if(mp[i][j]>10000 && ans[i][j]!=-1)
                res=min(res,ans[i][j]);
        }
    }
    if(res==10000)
        cout<<"-1";
    else
        cout<<res;
    return 0;
}

大伙帮忙看看为啥,但愿dalao别因为太简单就不想回答

2021/7/13 14:51
加载中...