用户自定义迷宫地图,指定入口和出口,采用图相关算法寻找一条出入口之间最短路径用C++写
时间: 2024-01-17 16:05:03 浏览: 141
以下是一个基于BFS算法的C++代码实现,用于寻找迷宫地图中从指定入口到出口的最短路径:
```c++
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int MAXN = 1005; // 最大地图大小
const int INF = 0x3f3f3f3f; // 无穷大
int n, m; // 地图大小
int sx, sy, ex, ey; // 入口和出口坐标
char maze[MAXN][MAXN]; // 迷宫地图
int dis[MAXN][MAXN]; // 距离数组
bool vis[MAXN][MAXN]; // 访问数组
int dir[4][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} }; // 方向数组
struct Node {
int x, y, step;
Node(int _x, int _y, int _step) : x(_x), y(_y), step(_step) {}
};
void bfs() {
memset(dis, INF, sizeof(dis));
memset(vis, false, sizeof(vis));
queue<Node> q;
q.push(Node(sx, sy, 0));
dis[sx][sy] = 0;
vis[sx][sy] = true;
while (!q.empty()) {
Node cur = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
int nx = cur.x + dir[i][0];
int ny = cur.y + dir[i][1];
if (nx >= 0 && nx < n && ny >= 0 && ny < m && !vis[nx][ny] && maze[nx][ny] != '#') {
vis[nx][ny] = true;
dis[nx][ny] = cur.step + 1;
q.push(Node(nx, ny, cur.step + 1));
}
}
}
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> maze[i];
for (int j = 0; j < m; j++) {
if (maze[i][j] == 'S') {
sx = i;
sy = j;
} else if (maze[i][j] == 'E') {
ex = i;
ey = j;
}
}
}
bfs();
cout << dis[ex][ey] << endl;
return 0;
}
```
其中,我们首先定义了一个节点结构体`Node`,用于存储地图上的某一个点的坐标和步数。然后,我们定义了一个BFS函数`bfs`,用于从入口开始搜索迷宫地图中的最短路径,并将结果存储在`dis`数组中。搜索过程中,我们使用了一个队列来维护当前需要遍历的点,同时使用一个访问数组`vis`来避免重复访问。最后,输出`dis[ex][ey]`即可得到从入口到出口的最短距离。
阅读全文