前面Dijkstra算法和Bellman-Ford算法解决了单源最短路径问题,但是如果需要获取图中任意两顶点的最短距离呢?我们可以使用前面两个算法我们可以遍历每个顶点得到每个顶点的单源最短距离,但是最短路径算法中提供了一种更为简单的算法帮助我们实现任意两顶点最短距离(Floyd)。

弗洛伊德算法

Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。 该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授

核心思路

使用邻接矩阵G来表示图,初始化G,将不可直达的顶点初始化为无穷大,定义k结点,遍历N个顶点->k,使用k作为任意两顶点i,j之间的中介点,

如果G[i][j]>G[i][k]+G[k][j],则执行松弛操作,这里我们就可以理解为什么叫插点法了,将每一个顶点当作中介点放入任意两顶点之间,

如果可以执行松弛操作,则进行松弛。

推导过程

V0->V1 1V0->V2 2V1->V2 -1

初始化图G,执行如下操作

第一轮:

第一步:选取V0作为中介点

第二步:插入任意两顶点之间

首先插入V0->V0之间,G[0][0]>G[0][0]+G[0][0],(0>0不满足)无需松弛,

再插入V0->V1之间,G[0][1]>G[0][0]+G[0][1],(1>0+1不满足)无需松弛,

再插入V0->V2之间,G[0][2]>G[0][0]+G[0][2],(2>0+2不满足)无需松弛。

首先插入V1->V0之间,G[1][0]>G[1][0]+G[0][0],(∞>∞+0不满足)无需松弛,

再插入V1->V1之间,G[1][1]>G[1][0]+G[0][1],(∞>∞+1不满足)无需松弛,

再插入V1->V2之间,G[1][2]>G[1][0]+G[0][2],(∞>∞+2不满足)无需松弛。

......

第二轮在选取V1作为中介点,重复上面操作(这一轮会松弛 G[0][2]>G[0][1]+G[1][2]->2>1+(-1) 满足条件,松弛)

第二轮在选取V2作为中介点,重复上面操作

最终得到最短路径

实现代码

  main.cpp//  Floyd  Created by 陈龙//  Copyright © 2019 陈龙. All rights reserved.//#include using namespace std;int N,E;int main(int argc, const char * argv[]) {    //N个顶点,E条边    cin>>N>>E;    int u,v,w;    int G[N][N];    //初始化无穷大    for (int i=0; i>u>>v>>w;        G[u][v] = w;    }    //动态规划找中介    for (int k=0; kG[i][k]+G[k][j]){                    G[i][j]=G[i][k]+G[k][j];                }            }        }    }    //最短路径    cout<

弗洛伊德算法_弗洛伊德算法相关推荐

  1. 常用十大算法_回溯算法

    回溯算法 回溯算法已经在前面详细的分析过了,详见猛击此处. 简单的讲: 回溯算法是一种局部暴力的枚举算法 循环中,若条件满足,进入递归,开启下一次流程,若条件不满足,就不进行递归,转而进行上一次流程. ...

  2. cb32a_c++_STL_算法_查找算法_(5)adjacent_find

    cb32a_c++_STL_算法_查找算法_(5)adjacent_find adjacent_find(b,e),b,begin(),e,end() adjacent_find(b,e,p),p-p ...

  3. 接受拒绝算法_通过算法拒绝大学学位

    接受拒绝算法 数据科学 (Data Science) Nina was close to tears when she accused Nick Gibb of ruining her life. N ...

  4. python序列模式的关联算法_关联算法

    以下内容来自刘建平Pinard-博客园的学习笔记,总结如下: 1 Apriori算法原理总结 Apriori算法是常用的用于挖掘出数据关联规则的算法,它用来找出数据值中频繁出现的数据集合,找出这些集合 ...

  5. 编程神奇算法_分类算法的神奇介绍

    编程神奇算法 由Bryan Berend | 2017年3月23日 (by Bryan Berend | March 23, 2017) About Bryan: Bryan is the Lead ...

  6. 数据挖掘算法_数据挖掘算法入门

    有南方的朋友讲过北方人喜欢打比方,尤其是甲方的,其实也没什么不好了.如果是做菜的话,那么这些算法就相当于烹饪的工具了.对原始的食材进行预处理.加工整合,选择合适烹饪工具,以及对应的方法步骤,最后收获舌 ...

  7. prim算法_贪心算法详解(附例题)

    贪心算法的特征规律 贪心算法,"贪心"二字顾名思义,因此其规律特征就是更加注重当前的状态,贪心法做出的选择是对于当前所处状态的最优选择,它的解决问题的视角是微观的"局部& ...

  8. 回溯算法和贪心算法_回溯算法介绍

    回溯算法和贪心算法 回溯算法 (Backtracking Algorithms) Backtracking is a general algorithm for finding all (or som ...

  9. 蛮力写算法_蛮力算法解释

    蛮力写算法 Brute Force Algorithms are exactly what they sound like – straightforward methods of solving a ...

  10. 层次聚类算法 算法_聚类算法简介

    层次聚类算法 算法 Take a look at the image below. It's a collection of bugs and creepy-crawlies of different ...

最新文章

  1. Laravel 引入自定义类库或第三方类库
  2. 微信遇到特殊服务器,解决微信网页授权,出现errcode:40163,errmsg:codebeenused,看似微信访问了2次这个回调接口的问题...
  3. boost::contract模块实现customer and manager的测试程序
  4. ES5-11原型与原型链深入、对象继承
  5. shell字符串的用法
  6. 大数据建设意义_大数据一体化平台打造政府智能数据库,助力智慧政务建设
  7. mysql表空间_浅谈mysql中各种表空间(tablespaces)的概念
  8. free C# Ebook (Amazing amount of ebooks available)
  9. 怎么样成为一个高手--有悟
  10. DOCKER镜像仓库地址
  11. python 画风场_Python人工智能的味道 - 图像风格迁移
  12. 2020年,抖音赚钱全攻略,做抖音,看这就够了!
  13. 3D建模软件应该学中文版还是英文版?Maya软件应该学中文版还是英文版?
  14. 陈绮贞 《吉他手》 吉他谱子 图片+文字
  15. 银河系创投徐芳:专注B2B这片热土,燃起产业新势能 | To B 50+
  16. iOS 修改系统返回键
  17. 购房流程 - 新浪网
  18. HTML给汉字头部添加拼音的标签
  19. 熬了三个大夜利用Python开发一个炸金花小游戏,注意别玩上瘾了~~(附完整源码)
  20. php 获取当前访问URL的协议

热门文章

  1. 震惊!Canvas原来还能这么搞!代码画一个时钟出来
  2. 91. 最短Hamilton路径【状压DP】
  3. Select2控件的使用
  4. MySQL删除存储过程
  5. 将Datatable一分为二
  6. 云计算机是一种基于资源,一种基于云平台和云计算的资源管理系统和方法
  7. dubbo provider异步_Dubbo支持什么协议?与SpringCould相比它为什么效率要高一些?
  8. 2021-10-16 集合(set)与映射(map) 恋上数据结构笔记
  9. System.currentTimeMills()显示系统当前时间
  10. 【Spring注解系列06】FactoryBean注入对象用法