Dijkstra
Posted kohano
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dijkstra相关的知识,希望对你有一定的参考价值。
1 #include <iostream> 2 #include <queue> 3 using namespace std; 4 const int INF=0x3f3f3f; 5 const int m=200005; 6 const int n=100005; 7 8 int head[n],cnt; 9 10 struct edge 11 int to,next,w; 12 e[m*2]; 13 14 void add(int u,int v,int w) 15 cnt++; 16 e[cnt].to=v; 17 e[cnt].next=head[u]; 18 e[cnt].w=w; 19 head[u]=cnt; 20 21 22 struct node 23 int u,d; 24 bool operator < (const node &rhs) const 25 return d>rhs.d; 26 27 ; 28 29 int dis[n]; 30 31 void dijkstra(int s) 32 for(int i=1;i<=n;i++) 33 34 dis[i]=INF; 35 36 dis[s]=0; 37 priority_queue<node> q; 38 q.push((node)s,dis[s]); 39 int v,w; 40 while(!q.empty()) 41 node x=q.top(); 42 q.pop(); 43 int u=x.u; 44 if(x.d!=dis[u])//vis 45 46 continue; 47 48 for(int i=head[u];i;i=e[i].next) 49 50 w=e[i].w; 51 v=e[i].to; 52 if(dis[u]+w<dis[v]) 53 54 dis[v]=dis[u]+w; 55 q.push((node)v,dis[v]); 56 57 58 59 60 61 int main() 62 int u,v,w; 63 int n,m,s; 64 cin>>n>>m>>s; 65 for(int i=1;i<=m;i++) 66 67 cin>>u>>v>>w; 68 add(u,v,w); 69 70 dijkstra(s); 71 for(int i=1;i<=n;i++) 72 73 cout<<dis[i]<<" "; 74 75 return 0; 76
以上是关于Dijkstra的主要内容,如果未能解决你的问题,请参考以下文章