标签:
spfa普通版就不写了,优化还是要的昂,spfa是可以判负环,接受负权边和重边的,判断负环只需要另开一个数组记录每个结点的入队次数,当有任意一个结点入队大于点数就表明有负环存在
1 #include<stdio.h> //spfa基本上要这些头文件
2 #include<string.h>
3 #include<queue>
4 using namespace std;
5
6 void spfa(int s,int p){
7 memset(vis,0,sizeof(vis));
8 memset(dist,-1,sizeof(dist));
9 queue<int>q;
10 vis[s]=1;
11 dist[s]=0;
12 q.push(s);
13 while(!q.empty()){
14 int i,t=q.front();
15 vis[t]=0;
16 q.pop();
17 for(i=head[t];~i;i=next[i]){
18 int j=point[i];
19 if(dist[j]==-1||dist[j]>dist[t]+val[i]){
20 dist[j]=dist[t]+val[i];
21 if(!vis[j]){
22 q.push(j);
23 vis[j]=1;
24 }
25 }
26 }
27 }
28 printf("%d\n",dist[p]);
29 }
标签:
原文地址:http://www.cnblogs.com/cenariusxz/p/4454482.html