Floyd算法

思想:将n个顶点的图G“分成”很多子图

每对顶点vi和vj对应子图Gij(i=0,1,…,n-1和j=0,1,…,n-1)

每对顶点vi和vj都保留一条顶点限于子图Gij中的最短路径Pij(称为待定路径),其长度为Dij,不断地往子图Gij中增加“中间过渡点”(子图不断扩大),不断地将Pij优化(始终保持在Gij中是最短的),当图中所有n个顶点都作为中间过渡点加到子图Gij中时,子图Gij就变成了原图G,待定路径Pij也就变成最终所求的(在原图中的)vi到vj的最短路径。(注:i、j全部为字母下标)

步骤:

步骤1)开始时,每个子图Gij只含顶点vi和vj,vi到vj的当前最短路径就是边<vi,vj>本身

,若此边不存在,则认为其长度为无穷大。

步骤2)k从0到n-1,执行循环体:

①向子图Gij中加一个“中间点”vk

②如果Dik+Dkj<Dij

说明从vi到中间点vk,再由中间点vk到vj的路径

比vi到vj不经过中间点vk的路径短

则修改待定路径Pij和其长度Dij,使

Pij=Pik接Pkj

Dij=Dik+Dkj

示例

以上为官方示例。世俗观点还没出来。(本人还没完全弄懂,后续)。

Floyd算法(伪程序)

void Floyd(***)         //“***”表示必要的参数

{ int i,j,k;

//初始化阶段

for(i=0;i<n;i++)

for(j=0; j<n;j++)

{ Dij=边<vi,vj>的长度;

if(Dij不是无穷大) Pij=vi接vj; else  Pij=空;

}

//待定路径逐步优化阶段

for(k=0; k<n;k++)      //加中间点vk

for(i=0;i<n;i++)

for(j=0;j<n;j++)

if(Dij>Dik+Dkj)

{  Dij=Dik+Dkj;

Pij=Pik接Pkj;

}

}

26最短路径之Floyd算法的更多相关文章

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

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

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

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

  3. 最短路径之Floyd算法

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

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

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

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

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

  6. 最短路径问题-Floyd算法

    概念 最短路径也是图的一个应用,即寻找图中某两个顶点的最短路径长度. 实际应用:例如确定某两个城市间的坐火车最短行车路线长度等. Floyd algorithm 中文名就是弗洛伊德算法. 算法思路:用 ...

  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. CreateTimerQueueTimer在DllMain中调用导致的loader lock

    开发一个COM组件在Windows 7上注册成功,但是Windows XP SP3版本却导致regsvr32.exe进程挂起.用WinDbg查看发现提示: Break- seconds... WARN ...

  2. Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等

    extends:http://blog.csdn.net/h7870181/article/details/12505883 Google Maps API 网络服务 官网地址 : https://d ...

  3. WCF之HTTPS传输WebConfig配置

    <system.serviceModel> <client> <endpoint address="https://evitest.1010bao.com:88 ...

  4. jQuery 核心 - noConflict() 方法

    1.遇到问题: 当我们写jquery时使用$,发现写的jquery全部失效: 2.发现问题: 排查后发现是noConflict()函数在作怪,因为使用noConflict()函数后,重新定义$名字为j ...

  5. C++类继承示例

    C++的子类与孙子类都实现了虚函数时,孙子类的实现会覆盖掉子类的实现. 继承的最主要的应用就是把不同的类放到一个数组中,然后遍历调用同名函数. 实例如下: #include <iostream& ...

  6. iOS - WKWebView那些坑

    WKWebView 是苹果在 WWDC 2014 上推出的新一代 webView 组件,用以替代 UIKit 中笨重难用.内存泄漏的 UIWebView.WKWebView 拥有60fps滚动刷新率. ...

  7. vue--todolist的实现

    简单示例: <template> <div id="Home"> <v-header></v-header> <hr> ...

  8. R排序sort、order、rank、arrange

    Ø sort sort(x, decreasing = FALSE, ...) ## Default S3 method: sort(x, decreasing = FALSE, na.last = ...

  9. R子集subset

    > x<-c(6,1,2,3,NA,12) > x[x>5]    #x[5]是未知的,因此其值是否大于5也是未知的 [1]  6 NA 12 > subset(x,x& ...

  10. 170811、Java获取jdk系统环境变量

    package com.rick.utils; /******************************************************** *@Desc: 系统变量属性工具类 ...