码迷,mamicode.com
首页 > 其他好文 > 详细

最短路--spfa+队列优化模板

时间:2015-04-24 22:21:38      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

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 }

 

最短路--spfa+队列优化模板

标签:

原文地址:http://www.cnblogs.com/cenariusxz/p/4454482.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!