这一个迷宫的程序我标志的地方有错误,问下错哪里,
我初学的是c语言,c++还没有学,所以一些语法方面的不是很懂,所以就来问下了,#include<iostream>
#include<queue>
using namespace std;
#define MAX_N 200
#define MAX_M 200
const int INF = 100000000;
//使用pair表示状态,使用typedef
//会更加方便一点
typedef pair<int, int> p;
//4G个方向移动的距离
int dx[4] = {
1, 0, -1, 0
};
int dy[4] = {
0, 1, 0, -1
};
//全局待输入的变量
char maze[MAX_N][MAX_M + 1];
int n, m;
int sx, sy;
int gx, gy;
int d[MAX_N][MAX_M];
//求从(sx,sy)到(gx,gy)的最短距离
int bfs(int n, int m, int sx, int sy, int gx, int gy)
{
queue<p> que;
//把所有位置都初始化为INF
for (int i = 0; i<n; i++)
for (int j = 0; j<m; j++)
d[i][j] = INF;
//将起点加入队列,并把这一地点的距离
//设置为0
que.push(p(sx, sy));---------------------------这一句有错,就是如何创建一个队列节点方便入入列?
d[sx][sy] = 0;
//不断循环直到队列的长度为0
while (que.size()){
//从队列的最前端取出元素
p p = que.front();
que.pop();
//如果取出的状态已经是终点,则结束搜索
if (p.first == gx && p.second == gy)
break;
//四个方向循环
for (int i = 0; i<4; i++){
int nx = p.first + dx[i];
int ny = p.second + dy[i];
//判断是否可以移动以及是否已经访问过
//d[nx][ny]!=INF即为已经访问过
if (0 <= nx && nx<n && 0 <= ny && ny<m && maze[nx][ny] != '#' && d[nx][ny] == INF)
{//可以移动的话,则加入队列,并且到该位置的距离确定为到p的距离+1
que.push(p(nx, ny));---------------------------------------------这一句有错
d[nx][ny] = d[p.first][p.second] + 1;
}
}
}
return d[gx][gy];
}
int main()
{
int count = 0;
scanf("%d%d", &n, &m);
for (int i = 0; i<n; i++)
for (int j = 0; j<m; j++)
scanf_s("%c", &maze[i][j]);
scanf("%d%d%d%d", &sx, &sy, &gx, &gy);
count = bfs(n, m, sx, sy, gx, gy);
return 0;
}