写个c++的最短路径算法那
时间: 2023-07-15 15:13:31 浏览: 93
c++最短路径算法.pdf
C++中最短路径算法有很多种,比如Dijkstra算法、Bellman-Ford算法、Floyd算法等。下面是一个简单的Dijkstra算法示例代码:
```cpp
#include <iostream>
#include <vector>
#include <queue>
#include <limits.h>
using namespace std;
// 定义边
struct Edge {
int to, cost;
};
// 定义邻接表
typedef vector<vector<Edge>> Graph;
// Dijkstra算法实现
vector<int> dijkstra(const Graph& g, int s) {
int n = g.size();
vector<int> dist(n, INT_MAX);
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> que;
dist[s] = 0;
que.push(make_pair(0, s));
while (!que.empty()) {
pair<int, int> p = que.top();
que.pop();
int v = p.second;
if (dist[v] < p.first) continue;
for (int i = 0; i < g[v].size(); i++) {
Edge e = g[v][i];
if (dist[e.to] > dist[v] + e.cost) {
dist[e.to] = dist[v] + e.cost;
que.push(make_pair(dist[e.to], e.to));
}
}
}
return dist;
}
// 示例
int main() {
int n = 5, m = 7; // n为节点数,m为边数
Graph g(n);
g[0].push_back(Edge{1,2});
g[0].push_back(Edge{2,5});
g[1].push_back(Edge{2,4});
g[1].push_back(Edge{3,6});
g[2].push_back(Edge{3,2});
g[2].push_back(Edge{4,7});
g[3].push_back(Edge{4,1});
vector<int> dist = dijkstra(g, 0);
for (int i = 0; i < n; i++) {
cout << "0 -> " << i << " : " << dist[i] << endl;
}
return 0;
}
```
以上代码使用了邻接表来表示图,使用了优先队列来实现Dijkstra算法。在示例中,我们定义了一个5个节点、7条边的图,并计算了从节点0开始到其他节点的最短距离。
阅读全文