• 多源最短路Floyd 算法————matlab实现


    弗洛伊德(Floyd)算法是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。


    基本思想

         通过Floyd计算图G=(V,E)中各个顶点的最短路径时,需要引入一个矩阵S,矩阵S中的元素a[i][j]表示顶点i(第i个顶点)到顶点j(第j个顶点)的距离。

         假设图G中顶点个数为N,则需要对矩阵S进行N次更新。初始时,矩阵S中顶点a[i][j]的距离为顶点i到顶点j的权值;如果i和j不相邻,则a[i][j]=∞。 接下来开始,对矩阵S进行N次更新。第1次更新时,如果"a[i][j]的距离" > "a[i][0]+a[0][j]"(a[i][0]+a[0][j]表示"i与j之间经过第1个顶点的距离"),则更新a[i][j]为"a[i][0]+a[0][j]"。 同理,第k次更新时,如果"a[i][j]的距离" > "a[i][k]+a[k][j]",则更新a[i][j]为"a[i][k]+a[k][j]"。更新N次之后,操作完成!

         matlab代码函数如下:

    function [dist,mypath]=myfloyd(a,sb,db);
    % 输入:a—邻接矩阵(aij)是指i 到j 之间的距离,可以是有向的
    % sb—起点的标号;db—终点的标号
    % 输出:dist—最短路的距离;% mypath—最短路的路径
    n=size(a,1); path=zeros(n);
    for i=1:n
    for j=1:n
    if a(i,j)~=inf
    path(i,j)=j; %j 是i 的后续点
    end
    end
    end
    for k=1:n
    for i=1:n
    for j=1:n
    if a(i,j)>a(i,k)+a(k,j)
    a(i,j)=a(i,k)+a(k,j);
    path(i,j)=path(i,k);
    end
    end
    end
    end
    dist=a(sb,db);
    mypath=sb; t=sb;
    while t~=db
    temp=path(t,db);
    mypath=[mypath,temp];
    t=temp;
    end
    return
    

      

  • 相关阅读:
    halcon中variation_model_single实例注释.
    vc 实现打印功能
    用VisualC++建立SOAP客户端应用(一)
    第六章
    OpenCV】透视变换 Perspective Transformation(续)
    第六章
    OpenCV仿射变换+投射变换+单应性矩阵
    【最新图文教程】WinCE5.0中文模拟器SDK(VS2008)的配置
    Visual Studio 2008 使用 WinCE 5.0 Emulator
    Win32 CMD批处理命令
  • 原文地址:https://www.cnblogs.com/renqiqiang/p/5791225.html
Copyright © 2020-2023  润新知