请用dijkstra算法编一个简单的最短路径程序,使用C++语言
时间: 2024-04-16 16:24:07 浏览: 108
Dijkstra算法求最短路径的C/C++程序
4星 · 用户满意度95%
当然可以!以下是一个使用C++语言编写的Dijkstra算法的简单最短路径程序示例:
```cpp
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int INF = 1e9;
// 边的结构体
struct Edge {
int to, cost;
};
// 图的结构体
typedef pair<int, int> P; // first是最短距离,second是顶点的编号
vector<vector<Edge>> graph; // 邻接表表示的图
// Dijkstra算法
void dijkstra(int start, vector<int>& dist) {
dist[start] = 0; // 起点的最短距离为0
priority_queue<P, vector<P>, greater<P>> pq; // 小顶堆
pq.push(make_pair(0, start));
while (!pq.empty()) {
P p = pq.top(); pq.pop();
int v = p.second;
if (dist[v] < p.first) {
continue; // 当前最短距离已更新,跳过
}
for (int i = 0; i < graph[v].size(); ++i) {
Edge e = graph[v][i];
if (dist[e.to] > dist[v] + e.cost) {
dist[e.to] = dist[v] + e.cost;
pq.push(make_pair(dist[e.to], e.to));
}
}
}
}
int main() {
int n, m, start;
cout << "请输入顶点数、边数和起点编号:";
cin >> n >> m >> start;
graph.resize(n);
vector<int> dist(n, INF);
cout << "请输入每条边的起点、终点和权值:" << endl;
for (int i = 0; i < m; ++i) {
int from, to, cost;
cin >> from >> to >> cost;
graph[from].push_back({to, cost});
}
dijkstra(start, dist);
cout << "从起点" << start << "到各个顶点的最短距离为:" << endl;
for (int i = 0; i < n; ++i) {
cout << "顶点" << i << ": ";
if (dist[i] == INF) {
cout << "INF" << endl;
} else {
cout << dist[i] << endl;
}
}
return 0;
}
```
你可以根据自己的需要修改顶点数、边数以及每条边的起点、终点和权值来测试程序。希望对你有帮助!
阅读全文