spfa作为图论中的常用算法,深受各类出题人和各位OIer的喜爱;

    so,为了给大众创造福利,宝宝在此奉上spfa大发的思路和模板;以感谢社会,

感谢CCF,感谢CCTV,

感谢我的老师,感谢同学们,

感谢noi,感谢noip,感谢ioi,

感谢不辞辛劳的学长学姐,

感谢帮我改程序,被我烦死的xxy ~QAQ~······and so on;

程序和图解做得比较难看,就请大家见谅了!!~(≧▽≦)/~ 谢啦!!☆⌒(*^-゜)v

思路:见程序

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. using namespace std;
  6. int v,x,y,n;
  7. int head[],num,m,dis[];
  8. bool vis[];
  9. struct nond
  10. {
  11. int pre,v,to,from;
  12. //pre指这条边的上一条边,v指这条边的边权,to指这条边的终点,from至这条边的终点;
  13. }e[];//边表存储,减少空间占用;
  14. queue<int>q;//队列存储所能更新的点;
  15. void put(int from,int to,int v)
  16. {
  17. e[++num].pre=head[from];
  18. e[num].from=from;//
  19. e[num].to=to;
  20. e[num].v=v//;这三句很好理解不解释
  21. head[from]=num;
  22. }//边表的读入函数;
  23. /*重点解释一下对于改变的上一条边的存储,
  24. 看程序下的图片详解,在此不进行解释;*/
  25. void spfa(int s)
  26. {
  27. q.push(s);//把s放入队列中;
  28. vis[s]=;//把节点s标记为使用中;
  29. int point=s;//用point去更新所有与point相连的节点的最短距离;
  30. while(!q.empty())//如果队列不为空,说明有节点能去更新其他节点;
  31. {
  32. point=q.front();//记录队列中的第一个节点去更行其他节点;
  33. q.pop();//队列中的第一个节点已被使用,弹出;
  34. vis[point]=;//该节点被弹出了队列,变为未被访问,未被使用;
  35. for(int i=head[point];i;i=e[i].pre)//以该节点去更新其他节点
  36. {
  37. if(dis[e[i].from]+e[i].v<dis[e[i].to])//自己理解,不解释
  38. {
  39. dis[e[i].to]=dis[e[i].from]+e[i].v;
  40. q.push(e[i].to);
  41. //节点i的最短距被更新过,说明i又可以去更新其他节点,把i读入队列;
  42. vis[e[i].to]=;//标记为使用中;
  43. }
  44. }
  45. }
  46. }
  47. int main()
  48. {
  49. cin>>n>>m;//n节点个数,m是边的个数;
  50. memset(dis,/,sizeof(dis));
  51. dis[]=;//dis存储到第i个点的最短路的长度;
  52. for(int i=;i<=m;i++){
  53. cin>>x>>y>>v;//x,y,v分别是相连边的起点~终点~长度;
  54. put(x,y,v);//向边表里加入边
  55. put(y,x,v);//因为是无向图,所以加入两次;
  56. }
  57. spfa();//spfa搜索!!!这是重点!注意了~(≧▽≦)/~
  58. for(int i=;i<=n;i++)
  59. cout<<dis[i]<<" ";
  60. }

如果对你有所帮助,别忘了加好评哦;么么哒!!下次见!88

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模板

    通过stl的queue实现的spfa(vector实现邻接表存图) 本模板没有考虑存在两点不连通的情况 如果需要判断则需要用到并查集或者遍历整个邻接表 #include<iostream> ...

  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. python基础教程1

    python作为一种编程语言,诞生于1990年左右,算是一门比较年轻的语言(也算是90后吧),它是面向对象的,但不同于JAVA\C#那么严格要求一切皆对象,更接近于C++,是面向过程和面向对象的结合: ...

  2. Access应用笔记<二>

    关于access的应用笔记 20140822 基本完成access数据库的搭建,并且尝试了查重,不匹配项目查找,以及上传新数据等功能,表现良好. 记录一下目前研究出来的sql语句: 1)去除重复项 S ...

  3. hadoop +zookeeper + hbase 单节点安装

    项目描述: 今天花了680元买了阿里云的一台内存1G, 带宽1M 的云主机. 想以后方便测试用,而且想把自己的博客签到自己的主机上.所以自己就搭了一个测试的环境. 可以用来进行基本的hbase 入库, ...

  4. 读取XML文件

    首先要确定好XML文件的位置,最好是放在程序的debug文件中,放在其他地方也可以,要写上绝对路径 using System; using System.Collections.Generic; us ...

  5. git中的版本库,暂存区和工作区

  6. HDU 5071 Chat(2014鞍山赛区现场赛B题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 解题报告:一个管理聊天窗口的程序,一共有八种操作,然后要注意的就是Top操作只是把编号为u的窗口 ...

  7. MySQL的InnoDB索引原理详解 (转)

    摘要: 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节. InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档).本着高效学习的目的,本 ...

  8. [codevs1022]覆盖

    [codevs1022]覆盖 试题描述 有一个N×M的单位方格中,其中有些方格是水塘,其他方格是陆地.如果要用1×2的矩阵区覆盖(覆盖过程不容许有任何部分重叠)这个陆地,那么最多可以覆盖多少陆地面积. ...

  9. 【转】UML类图几种关系的总结

    在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composit ...

  10. caffe学习系列(7):Blob,layer,Net介绍

    参考:http://www.cnblogs.com/denny402/p/5073427.html