最短路 SPFA

来源:互联网 发布:.node 编辑:程序博客网 时间:2024/04/29 13:53

最短路算法:SPFA


#include<stdio.h>#include<queue>#include<string.h>#include<algorithm>using namespace std;#define M 200002  //边#define N 20002  //点#define INF 1e9   //无穷大int dis[M];bool in_queue[M];queue<int>Q;int p[M],T,n,m;struct edge{int en,next,len;}E[M];void add(int st,int en,int len){E[T].en=en;E[T].len=len;E[T].next=p[st];p[st]=T++;}void init(){memset(p,-1,sizeof(p));T=0;while(Q.size()) Q.pop();}int spfa(int st,int en){int i,start,w;for(i=1;i<=n;i++){dis[i]=INF;in_queue[i]=false;}dis[st]=0;in_queue[st]=true;Q.push(st);while(!Q.empty()){start=Q.front();Q.pop();in_queue[start]=false;for(i=p[start];i!=-1;i=E[i].next){w=E[i].en;if(dis[w]>dis[start]+E[i].len){dis[w]=dis[start]+E[i].len;if(!in_queue[w]){Q.push(w);in_queue[w]=true;}}}}return dis[en];//for(i=2;i<=en;i++)//printf("%d\n",dis[i]);}int main(){int st,en,len;while(scanf("%d %d",&n,&m)!=EOF){init();while(m--){scanf("%d%d%d",&st,&en,&len);add(st,en,len);//add(en,st,len);//双向图}//spfa(1,n);printf("%d\n",spfa(1,n));}return 0;}

0 0