使用【c++】写【dijkstra堆优化】的代码
时间: 2024-10-03 13:03:47 浏览: 35
Dijkstra算法是一种用于寻找图中最短路径的算法,而堆优化通常用于提高查找最短路径的速度。在C++中,可以使用优先队列(如`std::priority_queue`)来实现这个过程,特别是当图的顶点数较大时,堆结构可以有效减少比较次数。
下面是一个简单的Dijkstra算法使用堆优化的C++代码示例:
```cpp
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
struct Node {
int dist;
int u;
bool operator<(const Node& other) const { return dist < other.dist; }
};
void dijkstra(vector<vector<int>>& graph, int start) {
int n = graph.size();
vector<int> dist(n, INT_MAX);
vector<bool> visited(n, false);
priority_queue<Node> pq;
dist[start] = 0;
pq.push({0, start});
while (!pq.empty()) {
Node top = pq.top(); // 获取距离最小的节点
pq.pop();
if (visited[top.u]) continue; // 如果已经访问过,跳过
visited[top.u] = true;
for (int v : graph[top.u]) {
int alt = top.dist + graph[top.u][v];
if (alt < dist[v]) {
dist[v] = alt;
pq.push({dist[v], v});
}
}
}
for (int i = 0; i < n; ++i) {
cout << "Shortest distance from node " << start << " to node " << i << ": " << dist[i] << endl;
}
}
int main() {
// 假设graph是一个邻接矩阵表示的图
vector<vector<int>> graph = {{0, 4, 0, 0, 0},
{4, 0, 8, 0, 0},
{0, 8, 0, 7, 0},
{0, 0, 7, 0, 9},
{0, 0, 0, 9, 0}};
dijkstra(graph, 0); // 从节点0开始
return 0;
}
```
阅读全文
相关推荐


















