#include <bits/stdc++.h> using namespace std; #define maxn 100000+10 #define INF 0x7ffffff typedef pair<int , int> P; struct edge { int to; int cost; edge(){} edge(int to_, int cost_) { to = to_; cost = cost_; } }; vector<edge> G[maxn]; int d[maxn], N, R; int dijkstra(int s) { priority_queue<P, vector<P>, greater<P> > que; fill(d, d+N, INF); d[s] = 0; que.push(P(0, s)); while(!que.empty()) { P p = que.top(); que.pop(); int v = p.second; if(d[v] < p.first) continue; for(int i=0; i<G[v].size(); i++) { edge e = G[v][i]; if(d[e.to] > d[v] + e.cost) { d[e.to] = d[v] + e.cost; que.push(P(d[e.to], e.to)); } } } } int main() { cin>>N>>R; int u, v, w; for(int i=0; i<R; i++) { cin>>u>>v>>w; G[u-1].push_back(edge(v-1, w)); G[v-1].push_back(edge(u-1, w)); } dijkstra(0); for(int i=0; i<N; i++) cout<<d[i]<<" "; //cout<<d[N-1]<<endl; return 0; }
原文地址:http://blog.csdn.net/dojintian/article/details/44724735