使用bfs求解迷宫问题,给出c++代码
时间: 2023-11-21 10:25:19 浏览: 101
以下是使用BFS算法求解迷宫问题的C++代码:
```c++
#include <iostream>
#include <queue>
using namespace std;
const int MAXN = 1005;
int n, m; // 迷宫的行数和列数
int sx, sy; // 起点坐标
int ex, ey; // 终点坐标
int maze[MAXN][MAXN]; // 迷宫矩阵
bool vis[MAXN][MAXN]; // 标记是否访问过
// 定义方向数组
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
struct Node {
int x, y, step; // 当前节点的坐标和走到当前节点的步数
};
bool check(int x, int y) {
if (x < 1 || x > n || y < 1 || y > m) return false; // 判断是否越界
if (maze[x][y] == 1 || vis[x][y]) return false; // 判断是否为障碍物或者已访问过
return true;
}
int bfs() {
queue<Node> q;
q.push({sx, sy, 0}); // 起点坐标和步数入队
vis[sx][sy] = true;
while (!q.empty()) {
Node top = q.front();
q.pop();
if (top.x == ex && top.y == ey) { // 到达终点
return top.step;
}
for (int i = 0; i < 4; i++) { // 枚举四个方向
int nx = top.x + dx[i], ny = top.y + dy[i];
if (check(nx, ny)) {
vis[nx][ny] = true;
q.push({nx, ny, top.step + 1}); // 新节点入队
}
}
}
return -1; // 无法到达终点
}
int main() {
cin >> n >> m;
cin >> sx >> sy >> ex >> ey;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> maze[i][j];
}
}
int ans = bfs();
cout << ans << endl;
return 0;
}
```
其中,`vis`数组用于标记节点是否已经访问过,`check`函数用于判断节点是否可以走,`bfs`函数实现BFS算法的过程。
阅读全文