dijistra

Posted wangyifan124

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dijistra相关的知识,希望对你有一定的参考价值。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 100010,maxm = 500010;
 4 int begin[maxn],to[maxm],next[maxm],v[maxm],e,d[maxn];
 5 bool b[maxn];
 6 int buf[17];
 7 int n,m,s;
 8 inline void read(int &x){
 9     char ch=getchar(); x=0;
10     while(ch<0) ch=getchar();
11     while(ch>=0 && ch<=9) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
12 }
13 inline void write(int x){
14     if(!x){putchar(0);putchar( );return;}
15     register int cnt=0;
16     while(x)buf[++cnt]=(x%10)+48,x/=10;
17     while(cnt)putchar(buf[cnt--]);
18     putchar( );
19 }
20 inline void add(int x,int y,int z){
21     to[++e] = y;
22     v[e] = z;
23     next[e] = begin[x];
24     begin[x] = e;
25 }
26 priority_queue< pair<int,int> > q;
27 inline void dijistra(){
28     for(int i = 1;i <= n;i++)d[i]=1e9+5;
29     d[s] = 0;
30     q.push(make_pair(0,s));
31     while(!q.empty()){
32         int x = q.top().second;
33         q.pop();
34         if(b[x])continue;
35         b[x] = 1;
36         for(int i = begin[x];i;i = next[i]){
37             int y = to[i],k = v[i];
38             if(d[y] > d[x]+k){
39                 d[y] = d[x]+k;
40                 q.push(make_pair(-d[y],y));
41             }
42         }
43     }
44 }
45 int main(){
46     read(n);
47     read(m);
48     read(s);
49     for(register int i = 1,x,y,z;i <= m;i++){
50         read(x);
51         read(y);
52         read(z);
53         add(x,y,z);
54     }
55     dijistra();
56     for(int i = 1;i <= n;i++)write(d[i]);
57     return 0;
58 }

 

以上是关于dijistra的主要内容,如果未能解决你的问题,请参考以下文章

dijistra和Folyd模板

dijistra

A strange lift(Dijistra优化)

链式前向星版DIjistra POJ 2387

贪心算法之Prim

微信小程序代码片段