概念

最短路径也是图的一个应用,即寻找图中某两个顶点的最短路径长度。

实际应用:例如确定某两个城市间的坐火车最短行车路线长度等。

Floyd algorithm

中文名就是弗洛伊德算法。

算法思路:用邻接矩阵来存储图的结构,edge[i][j]表示从结点i到结点j的最短路径长度,那么该如何计算edge[i][j]呢?首先我们可以假设当前的edge[i][j]不是最短的路径长度,必须经过k结点,比较edge[i][i]与edge[i][k]+edge[k][j]的大小(其中k的取值为所有点的编号),如果前者小,则表明i到j的最短路径为当前的edge[i][j];如果后者小,那么就需要修改当前的edge[i][j],使得edge[i][i]=edge[i][k]+edge[k][j]。

ok,下面用代码表示一下:

for (int k = ; k <= n; k++)
{
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n; j++)
{
if (edge[i][k] == MAX || edge[k][j] == MAX)
continue;
if (edge[i][j] == MAX || edge[i][k] + edge[k][j] < edge[i][j])
edge[i][j] = edge[i][k] + edge[k][j];
}
}
}

上面的三层循环就是Floyd算法的核心内容,其时间复杂度为O(n3)。

Floyd算法特点

1、时间复杂度按为O(n3),所以要求被求解的图的顶点个数不能大于200个,否则容易超时。

2、利用二维矩阵来进行存储图的结构,并进行相关计算。

3、算法结束后,图中所有结点之间的最短路径也被计算完成。可以查询到任意两点间的最短距离。

与迪杰斯特拉算法比较一下,前者主要是求图中某一顶点到其余各顶点的最短路径,后者主要是求图中任意两点间的最短路径。在实际应用中要学会灵活应用。

最短路径问题-Floyd算法的更多相关文章

  1. 数据结构与算法--最短路径之Floyd算法

    数据结构与算法--最短路径之Floyd算法 我们知道Dijkstra算法只能解决单源最短路径问题,且要求边上的权重都是非负的.有没有办法解决任意起点到任意顶点的最短路径问题呢?如果用Dijkstra算 ...

  2. 最短路径之Floyd算法

    Floyd算法又称弗洛伊德算法,也叫做Floyd's algorithm,Roy–Warshall algorithm,Roy–Floyd algorithm, WFI algorithm. Floy ...

  3. 最短路径问题——floyd算法

    floyd算法和之前讲的bellman算法.dijkstra算法最大的不同在于它所处理的终于不再是单源问题了,floyd可以解决任何点到点之间的最短路径问题,个人觉得floyd是最简单最好用的一种算法 ...

  4. 最短路径---Dijkstra/Floyd算法

    1.Dijkstra算法基础: 算法过程比prim算法稍微多一点步骤,但思想确实巧妙也是贪心,目的是求某个源点到目的点的最短距离,总的来说dijkstra也就是求某个源点到目的点的最短路,求解的过程也 ...

  5. 26最短路径之Floyd算法

    Floyd算法 思想:将n个顶点的图G“分成”很多子图 每对顶点vi和vj对应子图Gij(i=0,1,…,n-1和j=0,1,…,n-1) 每对顶点vi和vj都保留一条顶点限于子图Gij中的最短路径P ...

  6. 最短路径 - 弗洛伊德(Floyd)算法

    为了能讲明白弗洛伊德(Floyd)算法的主要思想,我们先来看最简单的案例.图7-7-12的左图是一个简单的3个顶点的连通网图. 我们先定义两个二维数组D[3][3]和P[3][3], D代表顶点与顶点 ...

  7. 图的最短路径---弗洛伊德(Floyd)算法浅析

    算法介绍 和Dijkstra算法一样,Floyd算法也是为了解决寻找给定的加权图中顶点间最短路径的算法.不同的是,Floyd可以用来解决"多源最短路径"的问题. 算法思路 算法需要 ...

  8. 每一对顶点间最短路径的Floyd算法

    Floyd思想可用下式描述: A-1[i][j]=gm[i][j] A(k+1)[i][j]=min{Ak[i][j],Ak[i][k+1]+Ak[K+1][j]}    -1<=k<=n ...

  9. 图结构练习——最短路径(floyd算法(弗洛伊德))

    图结构练习——最短路径 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  给定一个带权无向图,求节点1到节点n的最短路径.   输 ...

随机推荐

  1. unity 在Game视图中显示Gizmos

    自己画的Gizmos要想在Game视图中能看到,需要把Game视图窗口右上角的"Gizmos"按钮点下去.如图: 比如,下面代码以角色的capsuleCollider中心为中心画一 ...

  2. unity hide/show text

    using UnityEngine;using System.Collections; public class PlayerController:MonoBehaviour{    public U ...

  3. 进程间通信(java)--队列

    前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便 ...

  4. C++第12周(春)项目2 - &quot;双肩挑&quot;教师

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目2 - 教师兼干部类](第11章习题9) ...

  5. android笔记一 控件属性

    <?xml version = "1.0" encoding = "utf-8"?> <LinearLayout xmlns:android= ...

  6. 不能将参数1从“const char []”转换为“LPCTSTR

    今天在使用vs2008+MFC时候,使用editControl的replacesel(“”)发生报错.如下::不能将参数1从“const char []”转换为“LPCTSTR” 其解决方案就是, 在 ...

  7. iOS-ARC_Xcode检测循环引用

    iOS-ARC_Xcode检测循环引用 一,在桌面上新建立一个工程,在ViewController.m中输入如下代码: - (void)viewDidLoad { [super viewDidLoad ...

  8. DOS下运行C++程序配置

    闲来无事,想想C++是否一样能用dos来,编译运行程序呢,于是上网搜搜结果喜人,详见 http://blog.csdn.net/xiaoqinpeng/article/details/6556843 ...

  9. buildroot 文件系统添加telnet, ssh, 以及制作注意事项

    buildroot 制作Linux嵌入式文件系统,并添加telnet 以及ssh * sshd 服务的添加 // make menuconfig Target options ---> Targ ...

  10. [pthread]Linux C 多线程简单示例

    #include <stdio.h> #include <pthread.h> pthread_mutex_t mutex; pthread_cond_t cond; void ...