qt用优化队列实现dijkstra】
时间: 2024-06-01 11:03:43 浏览: 54
以下是使用优先队列实现Dijkstra算法的C++代码:
```c++
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
const int INF = INT_MAX; // 无穷大
int main() {
int n, m; // n表示顶点数,m表示边数
cin >> n >> m;
vector<vector<pair<int, int>>> graph(n); // 邻接表表示图
for (int i = 0; i < m; i++) {
int u, v, w; // 边的起点、终点、权值
cin >> u >> v >> w;
graph[u].push_back({v, w});
graph[v].push_back({u, w}); // 无向图
}
vector<int> dist(n, INF); // dist[i]表示源点到i的最短距离
dist[0] = 0; // 源点为0号顶点
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; // 优先队列,按距离排序
pq.push({0, 0});
while (!pq.empty()) {
int u = pq.top().second;
pq.pop();
for (auto& p : graph[u]) {
int v = p.first, w = p.second;
if (dist[u] + w < dist[v]) {
dist[v] = dist[u] + w;
pq.push({dist[v], v});
}
}
}
for (int i = 0; i < n; i++) {
cout << dist[i] << " ";
}
return 0;
}
```
注释中已经解释了每一步的作用,建议结合Dijkstra算法的原理和流程理解代码。
阅读全文