Files
Data-Structure/Algorithm/Graph/Dijkstra最短路径.cpp
2025-09-21 12:21:50 +08:00

47 lines
953 B
C++

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
const int INF = INT_MAX >> 1;
int main(){
int n, edge_num, start;
cin >> n >> edge_num >> start;
vector<vector<pair<int, int>>> adj(n);
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> dp;
vector<bool> used(n, false);
vector<int> dist(n, INF);
for(int i = 0; i < edge_num; i++){
int a, b, w;
cin >> a >> b >> w;
adj[a].push_back({b, w});
adj[b].push_back({a, w});
}
dp.push({0, start});
dist[start] = 0;
while(!dp.empty()){
//È·¶¨Ñ¡
auto[dists, v] = dp.top();
dp.pop();
if(used[v]) continue;
used[v] = true;
//Íùºó±ê¼Çµã
for(auto [u, d] : adj[v]){
if(!used[u] && dist[v] + d < dist[u]){//×îС
dist[u] = dist[v] + d;
dp.push({dist[u], u});
}
}
}
for(auto x : dist){
if(x != INF) cout << x << " ";
else cout << "INF" << " ";
}
cout << endl;
return 0;
}