`
hz_chenwenbiao
  • 浏览: 1010230 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Floyd算法(转)

阅读更多

弗洛伊德(Floyd)算法过程:
1、用D[v][w]记录每一对顶点的最短距离。
2、依次扫描每一个点,并以其为基点再遍历所有每一对顶点D[][]的值,看看是否可用过该基点让这对顶点间的距离更小。


算法理解:
最短距离有三种情况:
1、两点的直达距离最短。(如下图<v,x>)
2、两点间只通过一个中间点而距离最短。(图<v,u>)
3、两点间用通过两各以上的顶点而距离最短。(图<v,w>)

对于第一种情况:在初始化的时候就已经找出来了且以后也不会更改到。
对于第二种情况:弗洛伊德算法的基本操作就是对于每一对顶点,遍历所有其它顶点,看看可否通过这一个顶点让这对顶点距离更短,也就是遍历了图中所有的三角形(算法中对同一个三角形扫描了九次,原则上只用扫描三次即可,但要加入判断,效率更低)。
对于第三种情况:如下图的五边形,可先找一点(比如x,使<v,u>=2),就变成了四边形问题,再找一点(比如y,使<u,w>=2),可变成三角形问题了(v,u,w),也就变成第二种情况了,由此对于n边形也可以一步步转化成四边形三角形问题。(这里面不用担心哪个点要先找哪个点要后找,因为找了任一个点都可以使其变成(n-1)边形的问题)。

刺猬加注:

floyd的核心代码:

for (k=0;k<g.vexnum;k++)
{
    for (i=0;i<g.vexnum;i++)
    {
        for (j=0;j<g.vexnum;j++)
        {
            if (distance[i][j]>distance[i][k]+distance[k][j])
            {
                distance[i][j]=distance[i][k]+distance[k][j];
            }
        }
    }
}

 

 

结合代码 并参照上图所示 我们来模拟执行下 这样才能加深理解:
第一关键步骤:当k执行到x,i=v,j=u时,计算出v到u的最短路径要通过x,此时v、u联通了。
第二关键步骤:当k执行到u,i=v,j=y,此时计算出v到y的最短路径的最短路径为v到u,再到y(此时v到u的最短路径上一步我们已经计算过来,直接利用上步结果)。
第三关键步骤:当k执行到y时,i=v,j=w,此时计算出最短路径为v到y(此时v到y的最短路径长在第二步我们已经计算出来了),再从y到w。

依次扫描每一点(k),并以该点作为中介点,计算出通过k点的其他任意两点(i,j)的最短距离,这就是floyd算法的精髓!同时也解释了为什么k点这个中介点要放在最外层循环的原因.

 

出自:http://blog.csdn.net/littlehedgehog/archive/2007/08/19/1750576.aspx

分享到:
评论

相关推荐

    Floyd算法 Floyd算法

    中国数学建模-数学工具-Floyd最短路算法的MATLAB程序 wh-ee 重登录 隐身 用户控制面板 搜索 风格 论坛状态 论坛展区 社区服务 社区休闲 网站首页 退出 &gt;&gt; Matlab,Mathematica,maple,几何画板,word,sas,spss......

    基于MATLAB的Floyd算法

    基于MATLAB的Floyd算法,计算网络中任意结点间的最小距离!

    floyd_路径规划_Floyd算法_dynamicdijkstra_

    "Floyd_路径规划_Floyd算法_dynamicdijkstra"这一主题主要涵盖了计算机科学中的路径规划问题,特别是Floyd算法的运用以及与Dijkstra算法的比较。本文将深入探讨Floyd算法的核心思想、实现过程、适用场景以及它与动态...

    最短路的Floyd算法PPT课件.pptx

    "Floyd算法的知识点" Floyd算法是解决最短路问题的一种经典算法,由Floyd于1962年提出。该算法是一种权矩阵迭代算法,用于计算图中任意两节点之间的最短路。 Floyd算法的基本步骤 1. 令权矩阵D的初始值为无穷大,...

    floyd算法matlab通用程序

    本代码是floyd算法的通用matlab程序,代码写的十分经典,是数模比赛的利器

    Floyd算法.rar

    **Floyd算法详解** Floyd算法,也被称为Floyd-Warshall算法,是图论中的一个经典算法,主要用于解决在加权图中寻找任意两个顶点之间的最短路径问题。这个算法是由美国计算机科学家Robert W. Floyd提出的,因此得名...

    Floyd 算法 详细教程

    Floyd 算法详细教程 Floyd 算法是一种用于寻找给定的加权图中顶点间最短路径的算法。核心思路是通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。从图的带权邻接矩阵 A=[a(i,j)] n×n 开始,递归地进行 n 次...

    Floyd算法_路径_floyd_matlab_

    **Floyd算法** Floyd算法,也称为Floyd-Warshall算法,是图论中用于查找有向图或无向图中所有顶点之间最短路径的一种经典算法。该算法由Robert Floyd在1962年提出,适用于解决多源最短路径问题,即寻找从图中的一个...

    floyd算法求最短路径

    **Floyd算法详解** Floyd算法,又称为Floyd-Warshall算法,是解决图论中最短路径问题的一种经典算法。该算法的核心思想是通过动态规划的方法,逐步更新图中所有节点之间的最短路径,最终得到任意两个节点间的最短...

    数学建模算法中的 Floyd 算法

    **Floyd算法**,也称为Floyd-Warshall算法,是一种经典的图论算法,主要用于解决多点间的最短路径问题。在数学建模中,它是一个极其重要的工具,能够找到图中所有节点对之间的最短路径。这个算法的核心思想是通过...

    Floyd算法在配送中心选址的应用

    《Floyd算法在配送中心选址的应用》 在物流与供应链管理中,配送中心的选址是一项至关重要的决策。它直接影响到公司的运营成本、服务质量以及客户满意度。在这个过程中,Floyd最短路径算法作为一种高效的图论算法,...

    Floyd算法c语言实现

    Floyd算法,又称为Floyd-Warshall算法,是解决图论中的最短路径问题的一种经典方法。在计算机科学中,特别是在算法设计领域,它被广泛应用于网络路由和行程规划。C语言作为基础的编程语言,是实现这种算法的理想选择...

    Dijkstra、Floyd算法Matlab,Lingo实现

    Dijkstra、Floyd算法Matlab,Lingo代码的实现。

    floyd算法C语言源程序

    **Floyd算法,也称为Floyd-Warshall算法,是一种著名的图论算法,主要用于寻找图中所有顶点之间的最短路径。在C语言中实现这一算法,可以为学习数据结构和算法的学生提供宝贵的经验。** Floyd算法的核心思想是基于...

    Floyd算法(可以输出最佳路径路线)

    Floyd算法,也被称为Floyd-Warshall算法,是图论中的一个重要算法,主要用于求解图中所有顶点之间的最短路径。这个算法由Robert Floyd和Stephen Warshall独立提出,因此得名。在计算机科学中,它常被用于解决网络...

    Floyd算法又称为弗洛伊德算法

    ### Floyd算法详解 #### 一、算法介绍与背景 Floyd算法,又称弗洛伊德算法,是一种在图论中非常重要的算法。该算法能够高效地解决加权图中的所有顶点对之间的最短路径问题(All Pairs Shortest Path Problem, APSP...

    floyd算法实现导航。

    **Floyd算法实现导航** Floyd算法,也称为Floyd-Warshall算法,是一种用于解决图中所有顶点对之间最短路径问题的动态规划算法。在导航系统中,找到两个地点之间的最短路径至关重要,因为这直接影响到路线规划的效率...

    floyd算法 (c++)

    **Floyd算法**,也称为Floyd-Warshall算法,是一种在图中寻找所有节点对之间最短路径的算法。这个算法是由Robert Floyd在1962年提出的,主要用于解决有向图或无向图中的最短路径问题。在C++编程语言中实现Floyd算法...

    利用Floyd算法以及Dijkstra算法解决选址问题以及matlab代码文档

    首先读入小区间的距离矩阵和人口数量,然后分别使用Floyd算法和Dijkstra算法计算出任意两点之间的最短距离,并基于这些结果进行后续的分析和计算。 **4.3 模型评估** 通过比较两种方法的结果,可以选择最优的选址...

Global site tag (gtag.js) - Google Analytics