最短路径dijkstra算法完整代码
时间: 2024-12-04 12:14:34 浏览: 13
以下是Dijkstra算法的完整代码实现:
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
typedef pair<int, int> pii;
const int MAXN = 100005;
vector<pii> adj[MAXN];
int dist[MAXN];
bool vis[MAXN];
void dijkstra(int s) {
priority_queue<pii, vector<pii>, greater<pii>> pq;
pq.push(make_pair(0, s));
dist[s] = 0;
while (!pq.empty()) {
int u = pq.top().second;
pq.pop();
if (vis[u]) continue;
vis[u] = true;
for (auto v : adj[u]) {
if (dist[v.first] > dist[u] + v.second) {
dist[v.first] = dist[u] + v.second;
pq.push(make_pair(dist[v.first], v.first));
}
}
}
}
int main() {
int n, m, s;
cin >> n >> m >> s;
for (int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
adj[u].push_back(make_pair(v, w));
}
for (int i = 1; i <= n; i++) {
dist[i] = INT_MAX;
}
dijkstra(s);
for (int i = 1; i <= n; i++) {
if (dist[i] == INT_MAX) {
cout << "INF" << endl;
} else {
cout << dist[i] << endl;
}
}
return 0;
}
相关推荐















