通过stl的queue实现的spfa(vector实现邻接表存图)

本模板没有考虑存在两点不连通的情况

如果需要判断则需要用到并查集或者遍历整个邻接表

#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
int d[10001];//存储起始点到点的最短距离
int v[10001];//标记是否已经入队
int c[10001];//记录入队次数
int n,m,s;
int x,y,z;
struct edge
{
int to,w;
};
queue<int> q;
vector<edge> map[10001];
int spfa(int u)
{
memset(d,0x7f,sizeof(d));//初始化
q.push(u);//将点加入队列
v[u]=0;
d[s]=0;//起始点的距离为0
while(!q.empty())//队列不为空时
{
int x;
x=q.front();//取出队首点
q.pop();
v[x]=0;//已经不在队列中
for (vector<edge> ::iterator k=map[x].begin();k!=map[x].end();k++)
{//遍历每一个与其连接的点
edge o=*k;
int y=o.to;
if (d[x]+o.w<d[y])//图的松弛
{
d[y]=d[x]+o.w;
if (!v[y])//如果此点没入队
{
v[y]=1;//将其入队
c[y]++;//入队次数++
q.push(y);
if (c[y]>n) return 0;//如果入队次数超过点数则存在环
}
}
}
}
return 1;
}
int main ()
{
edge e;
cin>>n>>m>>s;
for (int i=1;i<=m;i++)
{
cin>>x>>y>>z;
e.to=y;
e.w=z;
map[x].push_back(e);
}
spfa(s);
for (int i=1;i<=n;i++)
{
cout<<d[i]<<' ';
}
return 0;
}

spfa模板的更多相关文章

  1. SPFA模板 Bellmanford优化版

    SPFA模板: queue<int>Q; ]; ],sumv[]; *],__next[*],e,w[*],first[],cnts[]; void AddEdge(int U,int V ...

  2. floyed dij spfa 模板

    /* SPFA模板 */ const int inf=0x3f3f3f3f; inline int SPFA(int s){ memset(dis,inf,sizeof(dis)); queue< ...

  3. spfa(模板)

    spfa作为图论中的常用算法,深受各类出题人和各位OIer的喜爱: so,为了给大众创造福利,宝宝在此奉上spfa大发的思路和模板:以感谢社会, 感谢CCF,感谢CCTV, 感谢我的老师,感谢同学们, ...

  4. 最短路算法 -- SPFA模板

    一.算法步骤 建立一个队列,初始时队列里只有起始点,再建立一个数组记录起始点到所有点的最短路径(该数组的初始值要赋为极大值,该点到它本身的路径赋为0,下面的模板中该数组为dist[]).然后执行松弛操 ...

  5. hdu-2544-最短路(SPFA模板)

    题目链接 题意很清晰,入门级题目,适合各种模板,可用dijkstra, floyd, Bellman-ford, spfa Dijkstra链接 Floyd链接 Bellman-Ford链接 SPFA ...

  6. spfa模板+讲解

    zz http://blog.sina.com.cn/s/blog_6ad20aef0100mc1a.html Spfa算法 (模板源代码) 这是Bellman Ford的改进算法.    算法介绍: ...

  7. 图论--最短路--SPFA模板(能过题,真没错的模板)

    [ACM常用模板合集] #include<iostream> #include<queue> #include<algorithm> #include<set ...

  8. UVA 558 判定负环,spfa模板题

    1.UVA 558 Wormholes 2.总结:第一个spfa,好气的是用next[]数组判定Compilation error,改成nexte[]就过了..难道next还是特殊词吗 题意:科学家, ...

  9. Dijkstra堆优化与SPFA模板

    Dijkstra+优先队列 #include<cstdio> #include<cctype> #include<queue> #include<cstrin ...

随机推荐

  1. chose.jquery 联动

    <!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  2. Linux学习之CentOS(二十八)--RAID原理基础及Linux下软件RAID配置

    一.RAID的原理基础 在 讲解RAID的原理基础之前,我们首先来了解一下传统磁盘的劣势.我们知道一台PC机种都会包含CPU.内存.主板.硬盘.网卡等硬件,影响计算机性能的 组建包括:CPU.主板总线 ...

  3. websocket

    websocket是一个协议,在单个TCP连接上提供全双工通信.  websocket被设计并被实现在 web浏览器和 web 服务器上,但是它可以被用于任何c/s 架构的应用程序中. websock ...

  4. ADB

    adb logcat 命令详解 log过滤 http://blog.csdn.net/liao277218962/article/details/50129009 如何使用 adb logcat 查看 ...

  5. applicationContext.xml

    <bean id="dataSource" parent="parentDataSource"> <property name="u ...

  6. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

  7. [C/C++] C/C++延伸学习系列之STL及Boost库概述

    想要彻底搞懂C++是很难的,或许是不太现实的.但是不积硅步,无以至千里,所以抽时间来坚持学习一点,总结一点,多多锻炼几次,相信总有一天我们会变得"了解"C++. 1. C++标准库 ...

  8. GitHub上值得关注的iOS开源项目

    1.AFNetworking地址:https://github.com/AFNetworking/AFNetworking用于网络请求 2.JSONKit地址:https://github.com/j ...

  9. CJCMS系列--demo代码篇

    CJCMS之前写了不多的文章,但是一直没有上代码,也许代码写得很乱很差,但是我觉得总得有个开始,持续改进.作为一个喜欢分享的程序员,我决定分享一下. 前面文章中的结构比较全,而此次我给出的demo,没 ...

  10. 掌握 Linux PC 性能之基准测试

    导读 基准测试是一项测试或一系列测试,用来确定某个计算机硬件运行起来的状况有多好:在许多情况下,“基准测试”实际上等同于“压力测试”,通过测试硬件的极限,然后可以将测得的结果与其他硬件测得的结果作一番 ...