蒟蒻求助!!

P1746 离开中山路

阿炜 @ 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);
            }
        }
    }
}
,,,

|