可以对每一个顶点使用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多源最短路的更多相关文章

  1. 【floyd 多源最短路】 poj 1125

    #include <stdio.h> #include <iostream> #include <memory.h> using namespace std; ][ ...

  2. HDU - 1869 六度分离 Floyd多源最短路

    六度分离 1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为“小世界现象(small world phenomenon)”的著名假说,大意是说,任何2个素不相识的人中间最多只隔着6个人,即 ...

  3. 最短路算法模板合集(Dijkstar,Dijkstar(优先队列优化), 多源最短路Floyd)

    再开始前我们先普及一下简单的图论知识 图的保存: 1.邻接矩阵. G[maxn][maxn]; 2.邻接表 邻接表我们有两种方式 (1)vector< Node > G[maxn]; 这个 ...

  4. 模板C++ 03图论算法 2最短路之全源最短路(Floyd)

    3.2最短路之全源最短路(Floyd) 这个算法用于求所有点对的最短距离.比调用n次SPFA的优点在于代码简单,时间复杂度为O(n^3).[无法计算含有负环的图] 依次扫描每一点(k),并以该点作为中 ...

  5. 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)

    关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...

  6. ACM-最短路(SPFA,Dijkstra,Floyd)之最短路——hdu2544

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  7. 2018/1/28 每日一学 单源最短路的SPFA算法以及其他三大最短路算法比较总结

    刚刚AC的pj普及组第四题就是一种单源最短路. 我们知道当一个图存在负权边时像Dijkstra等算法便无法实现: 而Bellman-Ford算法的复杂度又过高O(V*E),SPFA算法便派上用场了. ...

  8. 图论:Floyd-多源最短路、无向图最小环

    在最短路问题中,如果我们面对的是稠密图(十分稠密的那种,比如说全连接图),计算多源最短路的时候,Floyd算法才能充分发挥它的优势,彻彻底底打败SPFA和Dijkstra 在别的最短路问题中都不推荐使 ...

  9. Johnson算法:多源最短路算法

    Johnson算法 请不要轻易点击标题 一个可以在有负边的图上使用的多源最短路算法 时间复杂度\(O(n \cdot m \cdot log \ m+n \cdot m)\) 空间复杂度\(O(n+m ...

随机推荐

  1. #161: 给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。 你的任务就是检测矩阵是否符合条件

    试题描述 给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件. 你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件. "改变 ...

  2. 保持ssh连接长时间不断开的技巧

    我经常用ssh连接服务器,过段时间不用, 需要恢复一下断开的连接, 原因是NAT防火墙喜欢对空闲的会话进行超时处理,以确保它们状态表的干净和内存的低占用率,因为 长时间保持连接, 会长期占用部分系统资 ...

  3. Pycharm:使用笔记

    1.快捷键笔记 CTRL+D:复制当前行 CTRL+/:注释选中行 CTRL+ALT+L:自动format,自动进行标准格式化 ALT + 7:查看当前文件的类和方法概览 Ctrl + Y    删除 ...

  4. PHP生成HTML静态页面。

    function Generate(){ $html = '<!DOCTYPE html><html lang="en"><head> < ...

  5. SOA和微服务的原则及对比

    一.面向服务设计的原则 服务可复用:不管是否存在即时复用的机会,服务均被设计为支持潜在的可复用 服务共享一个标准契约:为了与服务提供者交互,消费者需要导入服务提供者的服务契约,这个契约可以是一个IDL ...

  6. mysql timestamp字段定义的

    Cause: java.sql.SQLException: Cannot convert value '2017-07-26 20:40:41.000000' from column 10 to TI ...

  7. element-ui table 嵌套

    嵌套的时时候用template,数据 scope.row.xxx <template> <div> <el-table :data="urls" st ...

  8. React页面插入script

    项目中遇到插入广告的需要,而广告的信息只是一个url链接,这个链接返回的时一个js,和以前插入广告有点不同.所有找了很多方式. 先来展示广告链接返回的信息: 假设广告链接为:http://192.16 ...

  9. 解决no module named ipykernel_launcher

    解决no module named ipykernel_launcher 最近开hydrogen的时候,提示no module named ipykernel_launcher. 记得以前解决过这个问 ...

  10. 关于$.ajax同步和异步的问题和提交后台的一些问题。

    经常有人ajax函数外,定义一个全局变量,并且在返回函数取出一个值用作判断条件,但是这一条件常常失效. var OnOff=0; var checkPhone = function() { var p ...