阿炜 @ 2022-11-01 19:06:05
找着板子写的,全挂了,我不李姐
#include<iostream>
#include<queue>
using namespace std;
int dx[]={-1,0,0,1};
int dy[]={0,-1,1,0};
struct Pos
{
int x,y;
};
queue <Pos> q;
bool vis [1010][1010];
int a[1010][1010];
int dis[1010][1010];
int n;
int x,y,xx,yy,xxx,yyy;
int bfs(int ax,int ay)
{
q.push((Pos{ax,ay}));
vis[ax][ay]=true;
while(!q.empty())
{
x=q.front().x;
y=q.front().y;
q.pop();
if(x==xxx&&y==yyy) return dis[x][y];
for(int i=0;i<4;i++)
{
int tx=x+dx[i];
int ty=y+dy[i];
if(tx>n||ty>n||tx<=0||ty<=0) continue ;
if(a[tx][ty]==1||vis[tx][ty]==true) continue ;
vis[tx][ty]=true;
dis[tx][ty]=dis[x][y]+1;
q.push((Pos){tx,ty});
}
}
return -1;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
cin>>xx>>yy>>xxx>>yyy;
cout<<bfs(xx,yy);
return 0;
}
by Michael39 @ 2023-06-18 11:20:11
你这bfs写的有点怪啊,结构体里应该是三个int的,分别表示x坐标,y坐标,当前走到这用了几步 给你看一下我代码,你参考一下
by Michael39 @ 2023-06-18 11:25:02
这是bfs阶段
#include <iostream>
#include <queue>
#include <string>
using namespace std;
bool b[1000][1000];
string ma[1000];
int n;
int dx[4]={1,0,0,-1},dy[4]={0,1,-1,0};
struct point
{
int x;
int y;
int z;
};
void bfs(int qx,int qy,int zx,int zy)
{
b[qx][qy]=true;
queue<point> q;
point m;m.x=qx;m.y=qy;m.z=0;
q.push(m);
while(!q.empty())
{
point f=q.front();
q.pop();
if(f.x==zx&&f.y==zy)
{
cout<<f.z;return ;
}
for(int i=0;i<4;i++)
{
int newx=f.x+dx[i];
int newy=f.y+dy[i];
if(!b[newx][newy]&&newx>=0&&newx<n&&newy>=0&&newy<n&&ma[newx][newy]!='1')
{
m.x=newx;m.y=newy;
m.z=f.z+1;
b[newx][newy]=true;
q.push(m);
}
}
}
}
,,,