單元最短路徑--Dijkstra
阿新 • • 發佈:2018-12-17
暫時只有程式碼
#include<bits/stdc++.h> #include<iostream> #define P pair<long long,int> #define INF 2147483647 #define maxn 500005 using namespace std; priority_queue<P,vector<P>,greater<P> >q; int dis[maxn],vis[maxn],head[maxn]; int n,m,s; int cnt; struct Edge{ int u,v,w,next; }e[maxn*2]; void add(int u,int v ,int w){ e[++cnt].u=u; e[cnt].v=v; e[cnt].w=w; e[cnt].next=head[u]; head[u]=cnt; } void dijkstra(){ while(!q.empty()){ int x=q.top().second; q.pop(); if(!vis[x]){ vis[x]=1; for(int i=head[x];i;i=e[i].next){ int v=e[i].v; dis[v]=min(dis[v],dis[x]+e[i].w); q.push(make_pair(dis[v],v)); } } } } int main(){ cin>>n>>m>>s; for(int i=1;i<=m;i++){ dis[i]=INF; } dis[s]=0; q.push(make_pair(0,s)); for(int i=1;i<=m;i++){ int a,b,c; cin>>a>>b>>c; add(a,b,c); } dijkstra(); for(int i=1;i<=n;i++){ cout<<dis[i]<<" "; } cout<<endl; return 0; }