spfa(模板)
spfa作为图论中的常用算法,深受各类出题人和各位OIer的喜爱;
so,为了给大众创造福利,宝宝在此奉上spfa大发的思路和模板;以感谢社会,
感谢CCF,感谢CCTV,
感谢我的老师,感谢同学们,
感谢noi,感谢noip,感谢ioi,
感谢不辞辛劳的学长学姐,
感谢帮我改程序,被我烦死的xxy ~QAQ~······and so on;
程序和图解做得比较难看,就请大家见谅了!!~(≧▽≦)/~ 谢啦!!☆⌒(*^-゜)v
思路:见程序
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int v,x,y,n;
int head[],num,m,dis[];
bool vis[];
struct nond
{
int pre,v,to,from;
//pre指这条边的上一条边,v指这条边的边权,to指这条边的终点,from至这条边的终点;
}e[];//边表存储,减少空间占用;
queue<int>q;//队列存储所能更新的点;
void put(int from,int to,int v)
{
e[++num].pre=head[from];
e[num].from=from;//
e[num].to=to;
e[num].v=v//;这三句很好理解不解释
head[from]=num;
}//边表的读入函数;
/*重点解释一下对于改变的上一条边的存储,
看程序下的图片详解,在此不进行解释;*/
void spfa(int s)
{
q.push(s);//把s放入队列中;
vis[s]=;//把节点s标记为使用中;
int point=s;//用point去更新所有与point相连的节点的最短距离;
while(!q.empty())//如果队列不为空,说明有节点能去更新其他节点;
{
point=q.front();//记录队列中的第一个节点去更行其他节点;
q.pop();//队列中的第一个节点已被使用,弹出;
vis[point]=;//该节点被弹出了队列,变为未被访问,未被使用;
for(int i=head[point];i;i=e[i].pre)//以该节点去更新其他节点
{
if(dis[e[i].from]+e[i].v<dis[e[i].to])//自己理解,不解释
{
dis[e[i].to]=dis[e[i].from]+e[i].v;
q.push(e[i].to);
//节点i的最短距被更新过,说明i又可以去更新其他节点,把i读入队列;
vis[e[i].to]=;//标记为使用中;
}
}
}
}
int main()
{
cin>>n>>m;//n节点个数,m是边的个数;
memset(dis,/,sizeof(dis));
dis[]=;//dis存储到第i个点的最短路的长度;
for(int i=;i<=m;i++){
cin>>x>>y>>v;//x,y,v分别是相连边的起点~终点~长度;
put(x,y,v);//向边表里加入边
put(y,x,v);//因为是无向图,所以加入两次;
}
spfa();//spfa搜索!!!这是重点!注意了~(≧▽≦)/~
for(int i=;i<=n;i++)
cout<<dis[i]<<" ";
}

如果对你有所帮助,别忘了加好评哦;么么哒!!下次见!88
spfa(模板)的更多相关文章
- SPFA模板 Bellmanford优化版
SPFA模板: queue<int>Q; ]; ],sumv[]; *],__next[*],e,w[*],first[],cnts[]; void AddEdge(int U,int V ...
- floyed dij spfa 模板
/* SPFA模板 */ const int inf=0x3f3f3f3f; inline int SPFA(int s){ memset(dis,inf,sizeof(dis)); queue< ...
- spfa模板
通过stl的queue实现的spfa(vector实现邻接表存图) 本模板没有考虑存在两点不连通的情况 如果需要判断则需要用到并查集或者遍历整个邻接表 #include<iostream> ...
- 最短路算法 -- SPFA模板
一.算法步骤 建立一个队列,初始时队列里只有起始点,再建立一个数组记录起始点到所有点的最短路径(该数组的初始值要赋为极大值,该点到它本身的路径赋为0,下面的模板中该数组为dist[]).然后执行松弛操 ...
- hdu-2544-最短路(SPFA模板)
题目链接 题意很清晰,入门级题目,适合各种模板,可用dijkstra, floyd, Bellman-ford, spfa Dijkstra链接 Floyd链接 Bellman-Ford链接 SPFA ...
- spfa模板+讲解
zz http://blog.sina.com.cn/s/blog_6ad20aef0100mc1a.html Spfa算法 (模板源代码) 这是Bellman Ford的改进算法. 算法介绍: ...
- 图论--最短路--SPFA模板(能过题,真没错的模板)
[ACM常用模板合集] #include<iostream> #include<queue> #include<algorithm> #include<set ...
- UVA 558 判定负环,spfa模板题
1.UVA 558 Wormholes 2.总结:第一个spfa,好气的是用next[]数组判定Compilation error,改成nexte[]就过了..难道next还是特殊词吗 题意:科学家, ...
- Dijkstra堆优化与SPFA模板
Dijkstra+优先队列 #include<cstdio> #include<cctype> #include<queue> #include<cstrin ...
随机推荐
- PHP中9大缓存技术总结
1.全页面静态化缓存 也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程.此种方式,在CMS系统中比较常见,比如dedecms: 一种比较常用的实现方 ...
- Ubuntu 16.10 虚拟机安装记录
一定要选自定义. 这里一定要选 稍后安装操作系统 都是坑! 启动时出现'SMBus Host Controller not enabled'错误提示,进不到图形界面. 解决办法:1.在启动Ubunt ...
- 【Hadoop】HDFS的运行原理
博文已转移,请借一步说话http://www.weixuehao.com/archives/596 简介 HDFS(Hadoop Distributed File System )Hadoop分布式文 ...
- hdu.1198.Farm Irrigation(dfs +放大建图)
Farm Irrigation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Mac Pro 安装 Sublime Text 2.0.2,个性化设置,主题 和 插件 收藏
1.到官网下载安装包 http://www.sublimetext.com/2 2.附注册码一枚 ----- BEGIN LICENSE ----- Andrew Weber Single User ...
- jQuery的$.ajax示例
$.ajax({ url: 'index.php?module=products&submod=product_experience_manage&method=ajaxGetSele ...
- HDU 5122 K.Bro Sorting(2014北京区域赛现场赛K题 模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5122 解题报告:定义一种排序算法,每一轮可以随机找一个数,把这个数与后面的比这个数小的交换,一直往后判 ...
- SSH-Struts第一弹:ActionSupport类
Action继承了com.opensymphony.xwork2.ActionSupport. package com.candy.login; import com.opensymphony.xwo ...
- mysql 表关联查询报错 ERROR 1267 (HY000)
解决翻案:http://stackoverflow.com/questions/1008287/illegal-mix-of-collations-mysql-error 即: SET collati ...
- phpcms评论框iframe无法自适应问题
问题背景: 之前用友言的时候改过网站的ip地址,改成127开头的了.但是协同开发的时候别人用的还是localhost. 结果在用评论的时候iframe死活不能自适应,看了一下源代码v9本身已经写过if ...