最全迷宫最短路径问题c++
时间: 2023-12-02 20:42:32 浏览: 119
以下是使用Boost Graph Library(BGL)解决迷宫最短路径问题的C++代码示例:
```cpp
#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/dijkstra_shortest_paths.hpp>
using namespace std;
using namespace boost;
typedef adjacency_list<vecS, vecS, directedS, no_property, property<edge_weight_t, int>> Graph;
typedef graph_traits<Graph>::edge_descriptor Edge;
typedef graph_traits<Graph>::vertex_descriptor Vertex;
const int MAXN = 1005;
int maze[MAXN][MAXN];
int dist[MAXN * MAXN];
int main() {
int n, m;
cin >> n >> m;
// 构建图
Graph g(n * m);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int u = i * m + j;
if (i > 0) {
int v = (i - 1) * m + j;
add_edge(u, v, maze[i - 1][j], g);
}
if (j > 0) {
int v = i * m + j - 1;
add_edge(u, v, maze[i][j - 1], g);
}
if (i < n - 1) {
int v = (i + 1) * m + j;
add_edge(u, v, maze[i + 1][j], g);
}
if (j < m - 1) {
int v = i * m + j + 1;
add_edge(u, v, maze[i][j + 1], g);
}
}
}
// 计算最短路径
Vertex start = 0;
Vertex end = n * m - 1;
dijkstra_shortest_paths(g, start, distance_map(&dist[0]));
// 输出结果
cout << dist[end] << endl;
return 0;
}
```
其中,`maze`数组表示迷宫的地图,`n`和`m`分别表示迷宫的行数和列数。该代码使用邻接表存储图,并使用Dijkstra算法计算最短路径。具体实现过程中,首先根据迷宫地图构建图,然后计算起点到终点的最短路径,并输出结果。
阅读全文