结构体:
struct Node { int to; LL cost; int next; }edge[2*MAX];
邻接表的建立:
void add_edge(int from,int to,LL cost) { tot++; edge[tot].to=to; edge[tot].cost=cost; edge[tot].next=head[from]; head[from]=tot; }
spfa算法:
void spfa() { for(int i=1;i<=v;i++) { dis[i]=-1; } dis[1]=0; int start,to; Q.push(1); while(!Q.empty()) { start=Q.front(); Q.pop(); use[start]=0; for(int i=head[start];i!=0;i=edge[i].next) { to=edge[i].to; if(dis[to]==-1 || dis[to]>dis[start]+edge[i].cost) { dis[to]=dis[start]+edge[i].cost; if(!use[to]) { Q.push(to); use[to]=1; } } } } }
附链接:http://flynoi.blog.hexun.com/48627838_d.html
这里详细讲解了spfa的原理,通俗易懂,甚是( 牛) !