【算法】Floyd算法
什么是Floyd
Floyd用于求最短路程。举个栗子,给你一张图,让你求出点【1】到点【5】的最短路程,你会怎么求?
(画图工具:CS Academy)

如上图,有向边分别是 1->2 1->3 2->3 2->4 3->4 3->5 4->5
如果一条路一条路去走,可能再这个点数较小的图中能够找到最小路,但是如果有100个点,1000个点呢?
显然不行。
所以,我们就要用到这个“Floyd”了!
学术化来说,Floyd长这样:
Floyd-Warshall算法,中文亦称弗洛伊德算法或佛洛依德算法,是解决任意两点间的最短路径的一种算法,可以正確處理有向圖或负权(但不可存在负权回路)的最短路径問題,同时也被用于计算有向图的传递闭包。(来源于Bing)
额...感觉根本没说什么啊...
好吧,就是解决最短路的一种算法(感觉在说废话)
下面来谈谈Floyd的思维方式吧!
Floyd算法
再来看那张图:

这张图的点数是5,我们要从【1】走到【5】,好像...点数有点多啊...
没关系,我们先来考虑从【1】走到【3】的最短路!

显然,线路一共有【2】条,分别是:
1->2->3
1->(1)->3
这个时候不难发现,从【1】到【3】,我们可以选择经过【2】,也可以直接到【3】(可以理解为经过【1】,【1】与【1】距离为0)
其实,即使是1->4,1->5也是这样的!
也就是说,对于起始点【1】和结束点【5】,只要能通过中间的某个点能形成一条通路,就可以尝试这条路,最后将长度和当前最小长度比较即可!
核心代码
for(int i=1;i<=n;i++){
    for(int j=1;j<=n;j++){
        for(int k=1;k<=n;k++){
            ans=mmap[i][k]+mmap[k][j];
            minn=min(minn,ans);
        }
    }
}            
简单来说,就是找一个“中间点”来判断是否要经过这个点。
写在最后
其实吧,弗洛伊德,真的,不难...

【算法】Floyd算法的更多相关文章
- [链接]最短路径的几种算法[迪杰斯特拉算法][Floyd算法]
		最短路径—Dijkstra算法和Floyd算法 http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html Dijkstra算 ... 
- 只有5行代码的算法——Floyd算法
		Floyd算法用于求一个带权有向图(Wighted Directed Graph)的任意两点距离的算法,运用了动态规划的思想,算法的时间复杂度为O(n^3).具体方法是:设点i到点j的距离为d[i][ ... 
- 多源最短路径算法—Floyd算法
		前言 在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Floyd算法也是非常经典,然而两种算法还是有区别的,Floyd主要计算多源最短路径. 在单源正权值最短路径,我们会用Dijkstra ... 
- 图的最短路径算法-- Floyd算法
		Floyd算法求的是图的任意两点之间的最短距离 下面是Floyd算法的代码实现模板: ; ; // maxv为最大顶点数 int n, m; // n 为顶点数,m为边数 int dis[maxv][ ... 
- 最短路-SPFA算法&Floyd算法
		SPFA算法 算法复杂度 SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环. SPFA一般情况复杂度是O(m)最坏情况下复杂度和朴素 ... 
- (转)最短路算法 -- Floyd算法
		转自:http://blog.51cto.com/ahalei/1383613 暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程 ... 
- 最短路径---Dijkstra/Floyd算法
		1.Dijkstra算法基础: 算法过程比prim算法稍微多一点步骤,但思想确实巧妙也是贪心,目的是求某个源点到目的点的最短距离,总的来说dijkstra也就是求某个源点到目的点的最短路,求解的过程也 ... 
- 最短路径——Floyd算法
		如何求一张图中任意两顶点之间的最短路径长度,这里写一种最简单的算法——Floyd算法: #include<stdio.h> #define inf 9999 int main() { ][ ... 
- Floyd 算法的动态规划本质
		[转载自:http://www.cnblogs.com/chenying99/p/3932877.html] Floyd–Warshall(简称Floyd算法)是一种著名的解决任意两点间的最短路径(A ... 
- 探求Floyd算法的动态规划本质(转)
		---恢复内容开始--- Floyd–Warshall(简称Floyd算法)是一种著名的解决任意两点间的最短路径(All Paris Shortest Paths,APSP)的算法.从表面上粗看,Fl ... 
随机推荐
- 第一阶段:Java基础之变量
			1.实例变量 #实例变量只能在类种声明,必须在构造函数.方法.任何块之外 #实例变量只能通过创建对象使用,当使用new创建对象,实例变量也同时被创建,当垃圾回收器回收对象时,实例变量也被销毁 #当在堆 ... 
- ssm整合-ssmbuild
			目录 项目结构 导入相关的pom依赖 Maven资源过滤设置 建立基本结构和配置框架 Mybatis层编写 Spring层 Spring整合service层 SpringMVC层 Controller ... 
- python关于变量介绍
			python变量 一.变量分为两种解释 1.随时可以变化的量 称之为变量 (变化多端嘛) 2.不会被变化的量 称之为常量 (常常不动嘛) #我们学习的python中没有真正定义的常量 #只有在绑定一个 ... 
- docker容器编排原来这么丝滑~
			前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 概念介绍: Docker Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Docker ... 
- linux find命令 -mtime参数 根据修改时间查找文件
			命令:find 搜索路径 -mtime n 主要说明n的含义: 例: n=5 "5"指的是前 5~6 天那一天修改的文件 n=-5 "-5"指的是 5 天内修改 ... 
- 3.初识Java
			一.Java特性和优势 简单性 面向对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性 二.Java三大版本 一次编写到处运行 JavaSE:标准版(桌面程序,控制台开发) JavaME: ... 
- Java学习day41
			在力扣刷了几个算法题,对比了自己和优解的差距 
- OpenHarmony标准设备应用开发(三)——分布式数据管理
			(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 邢碌 上一章,我们通过分布式音乐播放器.分布式炸弹.分布式购物车,带大家讲解了 OpenAtom OpenHarmon ... 
- 【课程汇总】OpenHarmony全场景Demo数字管家系列课(附链接)
			小孩放学了,做作业的时间到,窗帘.护眼灯自动打开,关掉电视和扫地机,给小孩一个安静舒适的学习环境:碰到学习难题,可以随时请求你的远程指导:晚上回家休息了,选择舒适的氛围灯,伴随着睡眠音乐进入梦乡:出门 ... 
- Java web与web gis学习笔记(一)——Tomcat环境搭建
			系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ... 
