Algo-Trian
This commit is contained in:
46
Algorithm/Graph/Dijkstra最短路径.cpp
Normal file
46
Algorithm/Graph/Dijkstra最短路径.cpp
Normal file
@@ -0,0 +1,46 @@
|
||||
#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()){
|
||||
//ȷ<><C8B7>ѡ
|
||||
auto[dists, v] = dp.top();
|
||||
dp.pop();
|
||||
if(used[v]) continue;
|
||||
used[v] = true;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>
|
||||
for(auto [u, d] : adj[v]){
|
||||
if(!used[u] && dist[v] + d < dist[u]){//<2F><>С
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user