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的主要内容,如果未能解决你的问题,请参考以下文章

ACM算法与竞赛协会第二次培训-图论-代码与题目汇总

ACM算法与竞赛协会第二次培训-图论-代码与题目汇总

ACM算法与竞赛协会第二次培训-图论-代码与题目汇总

四大算法解决最短路径问题(Dijkstra+Bellman-ford+SPFA+Floyd)