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了