qt软件中用dijkstra计算最短路径代码
时间: 2024-01-26 12:04:39 浏览: 76
以下是使用Dijkstra算法计算最短路径的C++代码示例:
```c++
#include <iostream>
#include <vector>
#include <queue>
#include <limits>
using namespace std;
// 定义无穷大
const int INF = numeric_limits<int>::max();
// 定义图的邻接表表示方式
typedef pair<int, int> Edge; // <目标节点, 权重>
typedef vector<vector<Edge>> Graph;
// Dijkstra算法
vector<int> dijkstra(const Graph& graph, int start) {
int n = graph.size();
vector<int> dist(n, INF); // 距离
priority_queue<Edge, vector<Edge>, greater<Edge>> pq; // 小根堆
dist[start] = 0;
pq.push(make_pair(0, start));
while (!pq.empty()) {
int u = pq.top().second;
pq.pop();
for (auto& e : graph[u]) {
int v = e.first, w = e.second;
if (dist[u] + w < dist[v]) {
dist[v] = dist[u] + w;
pq.push(make_pair(dist[v], v));
}
}
}
return dist;
}
int main() {
// 创建一个有向图
Graph graph(6);
graph[0].push_back(make_pair(1, 5));
graph[0].push_back(make_pair(2, 1));
graph[1].push_back(make_pair(3, 3));
graph[1].push_back(make_pair(4, 8));
graph[2].push_back(make_pair(1, 2));
graph[2].push_back(make_pair(4, 4));
graph[3].push_back(make_pair(4, 1));
graph[4].push_back(make_pair(2, 6));
graph[4].push_back(make_pair(5, 3));
graph[5].push_back(make_pair(3, 2));
// 计算从节点0到其他节点的最短路径
vector<int> dist = dijkstra(graph, 0);
// 输出结果
for (int i = 0; i < dist.size(); i++) {
cout << "最短路径长度(" << 0 << "," << i << ") = " << dist[i] << endl;
}
return 0;
}
```
在上述代码中,我们定义了一个无穷大常量`INF`,表示两个节点之间没有路径。接着,我们定义了一个邻接表表示法的有向图,其中包含6个节点和8条有向边。然后,我们使用`dijkstra`函数计算从节点0到其他节点的最短路径,并将结果存储在`dist`数组中。最后,我们输出每个最短路径的长度。
阅读全文