用户自定义迷宫地图,指定入口和出口,采用图相关算法寻找一条出入口之间最短路径C++
时间: 2024-01-14 07:04:58 浏览: 161
这个问题可以用图论中的最短路径算法来解决,常见的算法有 Dijkstra 算法和 Bellman-Ford 算法。
以下是一个使用 Dijkstra 算法求解的示例代码:
```c++
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int INF = 0x7fffffff;
// 定义图的结构体
struct Edge {
int to, cost;
};
typedef pair<int, int> P; // first 存储最短距离,second 存储顶点编号
vector<Edge> G[100]; // 邻接表存图
int d[100]; // 存储起点到各个点的最短距离
int n, m; // n 表示顶点数,m 表示边数
int start, end; // 起点和终点
// Dijkstra 算法求解最短路径
void dijkstra(int s) {
priority_queue<P, vector<P>, greater<P>> que; // 小根堆,按距离从小到大排序
fill(d, d + n, INF);
d[s] = 0;
que.push(make_pair(0, s));
while (!que.empty()) {
P p = que.top();
que.pop();
int v = p.second;
if (d[v] < p.first) continue;
for (int i = 0; i < G[v].size(); i++) {
Edge e = G[v][i];
if (d[e.to] > d[v] + e.cost) {
d[e.to] = d[v] + e.cost;
que.push(make_pair(d[e.to], e.to));
}
}
}
}
int main() {
cin >> n >> m;
for (int i = 0; i < m; i++) {
int a, b, w;
cin >> a >> b >> w;
G[a].push_back((Edge){b, w});
G[b].push_back((Edge){a, w}); // 无向图
}
cin >> start >> end;
dijkstra(start);
cout << d[end] << endl;
return 0;
}
```
其中,我们需要自己构建一个图的结构体 Edge,表示边的信息。vector<Edge> G[100] 表示邻接表存储图的结构,d[100] 存储起点到各个点的最短距离。在输入时,我们需要记录起点和终点的编号,然后调用 dijkstra(start) 函数即可求出最短路径长度。
阅读全文