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