Spfa算法 (模板源代码)
来源:互联网 发布:邪恶漫画软件大全下载 编辑:程序博客网 时间:2024/06/05 20:28
zz http://blog.sina.com.cn/s/blog_6ad20aef0100mc1a.html
Spfa算法 (模板源代码)
这是Bellman Ford的改进算法。算法介绍:建立一个队列,初始时队列里只有起始点,在建立一个表格记录起始点到所有点的最短路径(该表格的初始值要赋为极大值,该点到他本身的路径赋为0)。然后执行松弛操作,用队列里有的点去刷新起始点到所有点的最短路,如果刷新成功且被刷新点不在队列中则把该点加入到队列最后。重复执行直到队列为空。
时间复杂度:期望的时间复杂度O(ke), 其中k为所有顶点进队的平均次数,可以证明k一般小于等于2。
通用模板设计(源代码):
先说明一下,g所求有向图(g[i][j]为i到j的边长度,如果g[i][j]不存在,则赋值为-1),Q为队列,dis中所有元素应初始化为inf(0xfffffff最大值),visit中所有元素应初始化为false。
void spfa(int s,int m)
{
int i,k,ts=0,te=1;
Q[ts] = s;
dis[s] = 0;
while(ts<te)
{
k = Q[ts];
visit[k]=false; //修改后增加的 2010.8.18 01:27
for(i=1;i<=m;i++)
{
if(g[k][i]>0 && dis[i] - g[k][i] > dis[k])
{
dis[i] = dis[k] + g[k][i];
if(!visit[i])
{
Q[te++] = i;
visit[i] = true;
}
}
}
ts++;
}
}
其中,得到的dis数组dis[i]就是的源点s到点i的最短路径长度。
值得一提的是,当所求图的点很多时,用二维数组来储存图可能会MLE,这就需要用邻接表或者邻接矩阵来储存图了,只要将该模板稍改一下,就可以用了。不过,学会该算法的思想是最重要的了!
- Spfa算法 (模板源代码)
- Spfa算法 (模板源代码)
- 图论求单源最短路 spfa算法(附模板)
- spfa算法(洛谷模板题)
- 基础SPFA算法模板
- SPFA算法模板
- SPFA算法模板
- SPFA算法模板
- spfa 算法模板
- SPFA算法模板
- SPFA算法模板
- spfa算法模板
- Spfa算法模板
- hihocoder1093 SPFA算法模板
- SPFA算法模板
- SPFA算法模板
- hdu 2544 spfa算法模板
- 最短路【SPFA】算法模板
- Android中Intent传递对象的两种方法(Serializable,Parcelable)!
- SQL SERVER性能分析--死锁检测数据库阻塞语句 .
- XEN虚拟CPU管理
- 张孝祥csdn博客
- 编写shell时需要注意空格
- Spfa算法 (模板源代码)
- [MFC]GDI+的使用和Matrix的旋转
- gisergising
- ORACLE导数据
- 实例触发器
- FTP 如何删除<%=GetRobinLink()%>
- log4j logback slf4j项目配置中的简单总结
- 项目管理师,系统分析师,系统架构师
- 在SQL server 2005中一个新的特性——分区表