#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;
}
本地测试不通过,暂时还找不到问题,求大佬指正