求问
查看原帖
求问
695863
Prolystic楼主2023/2/19 14:00
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <queue>
#define MAXN 60
using namespace std;
struct point
{
    int x;
    int y;
    int steps = 0;
};
char maze[MAXN][MAXN] = {};
bool visited[MAXN][MAXN] = {true};
int dx[] = {1,-1,0,0};
int dy[] = {0,0,1,-1};
int n,m;
int sy,sx;
int gy,gx;
bool checkPoint(int x,int y)
{
    return (1<=x&&1<=y)&&(x<=n&&y<=m)&&(maze[x][y]=='.')&&(visited[x][y]==true);
}
int runMaze(int beginx,int beginy,int steps)
{
    point beginP;
    beginP.x = beginx;
    beginP.y = beginy;
    beginP.steps = steps;
    queue <point> q;
    q.push(beginP);
    while(!(q.empty()))
    {
        point qHead = q.front();
        q.pop();
        if(qHead.x==gy&&qHead.y==gx)
        {
            return qHead.steps;
        }
        for(int i = 0;i<4;i++)
        {
            int tx = qHead.x+dx[i];
            int ty = qHead.y+dy[i];
            int ts = qHead.steps+1;
            if(checkPoint(tx,ty))
            {
                beginP.x = tx;
                beginP.y = ty;
                beginP.steps = ts;
                visited[tx][ty] = false;
                q.push(beginP);
            }
        }
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    scanf("%d%d",&sy,&sx);
    scanf("%d%d",&gy,&gx);
    for(int i = 1;i<=n;i++)
    {
        for(int j = 1;j<=m;j++)
        {
            cin>>maze[i][j];
            if(maze[i][j]=='#')
            {
                visited[i][j] = false;
            }
        }
    }
    cout<<runMaze(sy,sx,0)<<"\n";
    return 0;
}

本地测试不通过,暂时还找不到问题,求大佬指正

2023/2/19 14:00
加载中...