然后用c++语言实现迷宫的最短路径问题
时间: 2023-11-27 21:50:39 浏览: 76
好的,下面是用 C++ 实现迷宫最短路径问题的代码:
```c++
#include <iostream>
#include <queue>
using namespace std;
const int N = 1010;
int n, m;
char maze[N][N];
int dist[N][N];
bool visited[N][N];
struct Point {
int x, y;
Point(int x = 0, int y = 0) :x(x), y(y) {}
};
const int dx[] = { -1, 0, 1, 0 };
const int dy[] = { 0, 1, 0, -1 };
bool is_valid(int x, int y) {
if (x < 1 || x > n || y < 1 || y > m) return false;
if (visited[x][y]) return false;
if (maze[x][y] == '#') return false;
return true;
}
void bfs(Point start) {
queue<Point> q;
q.push(start);
visited[start.x][start.y] = true;
dist[start.x][start.y] = 0;
while (!q.empty()) {
Point p = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
int nx = p.x + dx[i];
int ny = p.y + dy[i];
if (is_valid(nx, ny)) {
q.push(Point(nx, ny));
visited[nx][ny] = true;
dist[nx][ny] = dist[p.x][p.y] + 1;
}
}
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> maze[i][j];
visited[i][j] = false;
dist[i][j] = -1;
}
}
Point start, end;
cin >> start.x >> start.y >> end.x >> end.y;
bfs(start);
cout << dist[end.x][end.y] << endl;
return 0;
}
```
该代码使用广度优先搜索(BFS)算法,首先输入迷宫的大小和具体情况,然后输入起点和终点的坐标,使用 BFS 算法求出起点到终点的最短距离。
阅读全文