codeblocks迪杰斯特拉算法代码
时间: 2025-01-07 16:16:08 浏览: 42
### 使用Code::Blocks编写迪杰斯特拉算法
迪杰斯特拉算法用于计算加权图中的最短路径。下面是在Code::Blocks环境中使用C++实现该算法的一个例子:
```cpp
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
struct Node {
int vertex;
int weight;
};
typedef pair<int, int> ipair;
void dijkstra(vector<vector<Node>>& graph, int src) {
int V = graph.size();
vector<int> dist(V, INT_MAX);
priority_queue<ipair, vector<ipair>, greater<ipair>> pq;
pq.push(make_pair(0, src));
dist[src] = 0;
while (!pq.empty()) {
int u = pq.top().second;
pq.pop();
for (auto& neighbor : graph[u]) {
int v = neighbor.vertex;
int weight = neighbor.weight;
if (dist[v] > dist[u] + weight) {
dist[v] = dist[u] + weight;
pq.push(make_pair(dist[v], v));
}
}
}
cout << "Vertex Distance from Source\n";
for (int i = 0; i < V; ++i)
cout << i << "\t\t" << dist[i] << endl;
}
int main() {
int V = 9;
vector<vector<Node>> graph(V);
// Adding edges to the graph
void addEdge(int u, int v, int w, vector<vector<Node>>& adj){
adj[u].push_back({v,w});
adj[v].push_back({u,w});
};
addEdge(0, 1, 4, graph);
addEdge(0, 7, 8, graph);
addEdge(1, 2, 8, graph);
addEdge(1, 7, 11, graph);
addEdge(2, 3, 7, graph);
addEdge(2, 5, 4, graph);
addEdge(2, 8, 2, graph);
addEdge(3, 4, 9, graph);
addEdge(3, 5, 14, graph);
addEdge(4, 5, 10, graph);
addEdge(5, 6, 2, graph);
addEdge(6, 7, 1, graph);
addEdge(6, 8, 6, graph);
addEdge(7, 8, 7, graph);
dijkstra(graph, 0);
return 0;
}
```
此代码实现了基于优先队列优化版本的迪杰斯特拉算法,能够有效地找到从源节点到其他所有顶点之间的最短距离[^1]。
阅读全文
相关推荐

















