MLE了,蒟蒻求助(已看其他的MLE,问题不一样)

P1746 离开中山路

lao_da_ye @ 2022-11-08 21:20:42

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<queue>
using namespace std;

struct se
{
    int x;
    int y;
    int step;
};

int n,ans;
int sx,sy,ex,ey;
string mp[1010];
int pd[1010][1010];
int fx[5]={0,-1,0,1,0};
int fy[5]={0,0,-1,0,1};
queue<se> q;

int bfs(int hx,int hy)
{
    pd[hx][hy]=1;
    q.push({hx,hy,0});
    while(!q.empty())
    {
        int Nowx=q.front().x;
        int Nowy=q.front().y;
        int Nowstep=q.front().step;
        q.pop();
        if(Nowx==ex&&Nowy==ey)
        {
            return Nowstep;
        }
        for(int i=1;i<=4;i++)
        {
            if(Nowx+fx[i]>=0
               &&Nowy+fy[i]>=0
               &&Nowx+fx[i]<n
               &&Nowy+fx[i]<n
               &&mp[Nowx+fx[i]][Nowy+fy[i]]=='0'
               &&pd[Nowx+fx[i]][Nowy+fy[i]]==0)
               {
                q.push({Nowx+fx[i],Nowy+fy[i],Nowstep+1});
                pd[Nowx+fx[i]][Nowx+fy[i]]=1;
               }
        }
    }
}

int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>mp[i];
    }
    cin>>sx>>sy>>ex>>ey;
    ex--;
    ey--;
    ans=bfs(sx-1,sy-1);
    cout<<ans<<endl;
    return 0;
} 

by cwfxlh @ 2022-11-09 12:56:59

@lao_da_ye 把新节点入队后,修改pd数组那里,第二维应该是Nowy+fy[i],你写成Nowx+fy[i]了

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<queue>
using namespace std;

struct se
{
    int x;
    int y;
    int step;
};

int n,ans;
int sx,sy,ex,ey;
string mp[1010];
int pd[1010][1010];
int fx[5]={0,-1,0,1,0};
int fy[5]={0,0,-1,0,1};
queue<se> q;

int bfs(int hx,int hy)
{
    pd[hx][hy]=1;
    q.push({hx,hy,0});
    while(!q.empty())
    {
        int Nowx=q.front().x;
        int Nowy=q.front().y;
        int Nowstep=q.front().step;
        q.pop();
        if(Nowx==ex&&Nowy==ey)
        {
            return Nowstep;
        }
        for(int i=1;i<=4;i++)
        {
            if(Nowx+fx[i]>=0
               &&Nowy+fy[i]>=0
               &&Nowx+fx[i]<n
               &&Nowy+fx[i]<n
               &&mp[Nowx+fx[i]][Nowy+fy[i]]=='0'
               &&pd[Nowx+fx[i]][Nowy+fy[i]]==0)
               {
                q.push({Nowx+fx[i],Nowy+fy[i],Nowstep+1});
                pd[Nowx+fx[i]][Nowy+fy[i]]=1;//这里改了
               }
        }
    }
}

int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>mp[i];
    }
    cin>>sx>>sy>>ex>>ey;
    ex--;
    ey--;
    ans=bfs(sx-1,sy-1);
    cout<<ans<<endl;
    return 0;
} 

by cwfxlh @ 2022-11-09 12:57:23

@lao_da_ye 改了就可以AC了


|