Floyd多源最短路
可以对每一个顶点使用Dijkstra算法求多源最短路。
这里我们来介绍另一种解法:Floyd
Floyd算法的主要思想是迭代。每次迭代会朝着答案更近一步。
首先定义一个二维数组Dk[i][j](k初始等于0).这个二维数组代表从i到j的最短距离。
Floyd更适合解决稠密图,所以我们使用邻接矩阵来表示图。
初始化:
如果i,j有路 D0[i][j] = G[i][j] (G为我们的邻接矩阵)
否则 D0[i][j] = INF(正无穷大)
(1)我们加入一个顶点,这个点的加入可能会影响到某两个点之间的最短路。所以检查任意i到k, k到j之间的距离。
如果 Dk-1[i][k] + Dk-1[k][j] < Dk[i][j]
更新 :Dk[i][j] = Dk-1[i][k] + Dk-1[k][j]
(2)循环加入每一个顶点,直到所以顶点都被加入,Floyd结束。
(如果我们想得到两个点之间的路径, 在执行算法的同时记录path[i][j])
#define MaxVertexNum 100000 typedef int Vertex;
typedef struct Node
{
Vertex id;
}Node; typedef struct MyGraph
{
int g[MaxVertexNum][MaxVertexNum];
int v, e;
}MyGraph; void Floyd(MyGraph& G, int D[][], Vertex path[][])
{
//初始化
for(Vertex i = ; i < G.v; i++)
{
for(Vertex j = ; j < G.v; j++)
{
if(G.g[i][j] == -)
D[i][j] = INF;
else
D[i][j] = G.g[i][j];
}
} //迭代
for(Vertex k = ; k < G.v; k++)
{
for(Vertex i = ; i < G.v; i++)
{
for(Vertex j = ; j < G.v; j++)
{
//如果得到更小的路径,更新
if(D[i][j] > D[i][k] + D[k][j])
{
D[i][j] = D[i][k] + D[k][j];
path[i][j] = k;
}
}
}
} }
Floyd多源最短路的更多相关文章
- 【floyd 多源最短路】 poj 1125
#include <stdio.h> #include <iostream> #include <memory.h> using namespace std; ][ ...
- HDU - 1869 六度分离 Floyd多源最短路
六度分离 1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为“小世界现象(small world phenomenon)”的著名假说,大意是说,任何2个素不相识的人中间最多只隔着6个人,即 ...
- 最短路算法模板合集(Dijkstar,Dijkstar(优先队列优化), 多源最短路Floyd)
再开始前我们先普及一下简单的图论知识 图的保存: 1.邻接矩阵. G[maxn][maxn]; 2.邻接表 邻接表我们有两种方式 (1)vector< Node > G[maxn]; 这个 ...
- 模板C++ 03图论算法 2最短路之全源最短路(Floyd)
3.2最短路之全源最短路(Floyd) 这个算法用于求所有点对的最短距离.比调用n次SPFA的优点在于代码简单,时间复杂度为O(n^3).[无法计算含有负环的图] 依次扫描每一点(k),并以该点作为中 ...
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
- ACM-最短路(SPFA,Dijkstra,Floyd)之最短路——hdu2544
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- 2018/1/28 每日一学 单源最短路的SPFA算法以及其他三大最短路算法比较总结
刚刚AC的pj普及组第四题就是一种单源最短路. 我们知道当一个图存在负权边时像Dijkstra等算法便无法实现: 而Bellman-Ford算法的复杂度又过高O(V*E),SPFA算法便派上用场了. ...
- 图论:Floyd-多源最短路、无向图最小环
在最短路问题中,如果我们面对的是稠密图(十分稠密的那种,比如说全连接图),计算多源最短路的时候,Floyd算法才能充分发挥它的优势,彻彻底底打败SPFA和Dijkstra 在别的最短路问题中都不推荐使 ...
- Johnson算法:多源最短路算法
Johnson算法 请不要轻易点击标题 一个可以在有负边的图上使用的多源最短路算法 时间复杂度\(O(n \cdot m \cdot log \ m+n \cdot m)\) 空间复杂度\(O(n+m ...
随机推荐
- 基于LNMP的Zabbix4.0.1部署
转:http://www.safecdn.cn/monitor/2018/12/lnmp-zabbix4-0-1-install/306.htmlZabbix4.0.1部署 一 安装源和Zabb ...
- Jquery对表格的一些简单应用 查询&即时匹配&点击高亮等
代码如下(暂时没有用原生js实现): <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- PAT甲级
https://www.cnblogs.com/jlyg/p/7525244.html 哇咔咔,瞧人家都刷完甲级130道题了,哼,有什么了不起的,考前刷完,再刷的比你多,哼,照样吊打. 沙耶加油! 一 ...
- 在网站中使用UEditor富文本编辑器
UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点. 官网链接 进入到下载页面,选择相应的版本下载 这里我们使用ASP.NET开发,所以选择 ...
- matplotlib 坑
1 archlinux里安装好matplotlib之后一定要安装python-cario pacman -S python-cairo
- idea导入eclipse项目的配置
idea导入eclipse项目需要的配置 1.配置jdk,这两处选择一样就可以,也可以根据自己需求选择,上边的比下边的版本高就行 2.这里会默认和配置jdk一样 3.添加lib依赖,选择到项目的lib ...
- 582. Kill Process杀死所有子代
[抄题]: Given n processes, each process has a unique PID (process id) and its PPID (parent process id) ...
- SQL Server 2008 R2 根据.asmx访问WebService
.asmx 都是.Net 同系列,所以学习的时候会比较简单. 方法一: 步骤1.在浏览器打开.asmx地址可以到方法列表, 步骤2.点进方法列表会有SOAP调用的案例, 步骤3.SQL Server ...
- ie每次登陆出现:Windows安全性 iexplore.exe 正在连接到 记住我的凭证不起作用
解决方案: ie浏览器--设置--Intenet选项--安全--Internet--自定义级别--用户身份验证--登陆 勾选自动使用当前用户名和密码登陆 确定--确定
- Python开发——数据类型【运算符】
算数运算符 比较运算符 赋值运算符 逻辑运算符 成员运算符