最短路径 SPFA 算法

莫名其妙找到的板子
#include <iostream> #include <cstring> #include <queue> using namespace std; struct edge { int v,w,next; }a[500001]; int link[10001],d[10001],n,m,s,X,Y,Z; bool v[10001]; queue<int>q; void add(int u,int v,int w) { static int p=0; p++; a[p].v=v; a[p].w=w; a[p].next=link[u]; link[u]=p; } int main() { cin >> n >> m >> s; for(int i=1;i<=m;i++) { cin >> X >> Y >> Z; add(X,Y,Z); } q.push(s); v[s]=true; memset(d,0x3F,sizeof(d)); d[s]=0; while(!q.empty()) { int x=q.front(); q.pop(); v[x]=false; for(int i=link[x];i!=0;i=a[i].next) { if(d[x]+a[i].w<d[a[i].v]) { d[a[i].v]=d[x]+a[i].w; if(v[a[i].v]==false) { v[a[i].v]=true; q.push(a[i].v); } } } } for(int i=1;i<=n;i++) { cout << d[i] << ' '; } return 0; }

 

posted @ 2016-08-30 20:27  ghj1222  阅读(143)  评论(0编辑  收藏  举报