用C++语言实现5*5规格迷宫最短路径问题
时间: 2023-11-27 17:51:17 浏览: 122
C++迷宫最短路径
要解决迷宫最短路径问题,可以使用广度优先搜索算法(BFS)来实现。BFS算法广泛应用于图形和树中的搜索问题,其中从起点开始扩展每个节点,并在扩展的所有节点上重复此过程,直到找到目标节点。
以下是一个使用C++语言实现5*5规格迷宫最短路径问题的示例代码:
```c++
#include <iostream>
#include <queue>
using namespace std;
const int MAXN = 5; // 迷宫规格
int maze[MAXN][MAXN] = { // 迷宫地图
{0, 1, 0, 0, 0},
{0, 1, 0, 1, 0},
{0, 0, 0, 0, 0},
{0, 1, 1, 1, 0},
{0, 0, 0, 1, 0}
};
int d[MAXN][MAXN]; // 到达每个点的最短距离
int dx[4] = {-1, 0, 1, 0}; // 方向数组
int dy[4] = {0, 1, 0, -1};
struct Node {
int x, y;
};
int bfs() {
queue<Node> q;
Node s = {0, 0}; // 起始节点
q.push(s);
memset(d, -1, sizeof(d));
d[0][0] = 0;
while (!q.empty()) {
Node cur = q.front(); q.pop();
if (cur.x == MAXN-1 && cur.y == MAXN-1) break; // 到达终点
for (int i = 0; i < 4; ++i) {
int nx = cur.x + dx[i];
int ny = cur.y + dy[i];
if (nx >= 0 && nx < MAXN && ny >= 0 && ny < MAXN && maze[nx][ny] == 0 && d[nx][ny] == -1) { // 可行的下一步
Node next = {nx, ny};
q.push(next);
d[nx][ny] = d[cur.x][cur.y] + 1;
}
}
}
return d[MAXN-1][MAXN-1];
}
int main() {
cout << bfs() << endl;
return 0;
}
```
在上面的代码中,我们使用了一个结构体`Node`来表示节点的坐标。首先将起始节点入队并将到达每个点的最短距离初始化为-1。在每次循环中,我们从队列中取出一个节点,并在其周围四个方向扩展节点。如果下一步是可行的,则将其入队,并将到达该节点的最短距离更新为当前节点的最短距离+1。
最后,我们返回到达终点的最短距离。对于上述的迷宫,该代码将输出9,即到达右下角的最短距离为9。
阅读全文