Floyd算法

使用范围:

1)求每对顶点的最短路径;

2)有向图、无向图和混合图;

算法思想:

直接在图的带权邻接矩阵中用插入顶点的方法依次递推地构造出n个矩阵D(1), D(2), …, D(n), D(n)是图的距离矩阵, 同时引入一个后继点矩阵记录两点间的最短路径.

算法步骤:

d(i,j) : i到j的距离;

path(i,j): i到j的路径上i的后继点;

输入带权邻接矩阵a(i,j).

1)赋初值

对所有i,j, d(i,j)⬅a(i,j) , path(i,j)⬅j,k=l.

2)更新d(i,j) , path(i,j)

对所有i,j, 若d(i,k)+d(k,j)<d(i,j),则

d(i,j)⬅d(i,k)+d(k,j) , path(i,j)⬅path(i,k) , k ⬅k+1

3)重复2)直到k=n+1

使用说明:

Floyd算法程序的使用说明:

1.    [D, path]=floyd(a),  返回矩阵D, path 。其中a是所求图的带权邻接矩阵,D(i,j)表示i到j的最短距离;  path(i,j)表示i与j之间的最短路径上顶点i的后继点.

2.   [D, path, min1, path1]= floyd(a,i,j)   返回矩阵D, path;  并返回i与j之间的最短距离min1和最短路径path1.

MATLAB源码:

function [D,path,min1,path1]=floyd(a,start,terminal)
D=a;n=size(D,1);path=zeros(n,n);
for i=1:nfor j=1:nif D(i,j)~=infpath(i,j)=j;
end,  end, end
for k=1:nfor i=1:nfor j=1:nif D(i,k)+D(k,j)<D(i,j)D(i,j)=D(i,k)+D(k,j);path(i,j)=path(i,k);
end, end, end,endif nargin==3min1=D(start,terminal);m(1)=start;i=1;path1=[ ];   while   path(m(i),terminal)~=terminalk=i+1;                                m(k)=path(m(i),terminal);i=i+1;endm(i+1)=terminal;path1=m;
end

示例:

a =[ 0     2     8     1   Inf   Inf   Inf   Inf   Inf   Inf   Inf;2     0     6   Inf     1   Inf   Inf   Inf   Inf   Inf   Inf;8     6     0     7     5     1     2   Inf   Inf   Inf   Inf;1   Inf     7     0   Inf   Inf     9   Inf   Inf   Inf   Inf;Inf     1     5   Inf     0     3   Inf     2     9   Inf   Inf;Inf   Inf     1   Inf     3     0     4   Inf     6   Inf   Inf;Inf   Inf     2     9   Inf     4     0   Inf     3     1   Inf;Inf   Inf   Inf   Inf     2   Inf   Inf     0     7   Inf     9;Inf   Inf   Inf   Inf     9     6     3     7     0     1     2;Inf   Inf   Inf   Inf   Inf   Inf     1   Inf     1     0     4;Inf   Inf   Inf   Inf   Inf   Inf   Inf     9     2     4     0];
start = 1;
terminal = 11;
[D,path,min1,path1]=floyd(a,start,terminal)

结果:

min1 =13path1 =1     2     5     6     3     7    10     9    11

Floyd算法求最短路径(附代码实例)相关推荐

  1. C++floyd warshall算法求最短路径(附完整源码)

    C++floyd warshall算法求最短路径 floyd warshall算法求最短路径的完整源码(定义,实现,main函数测试) floyd warshall算法求最短路径的完整源码(定义,实现 ...

  2. Python Floyd算法求最短路径

    Floyd算法简介: Floyd算法 floyd算法(多源最短路径) python实现 例题 求下图各节点最短路径 Floyd算法如下: from math import * import numpy ...

  3. 动态规划 - Floyd算法求最短路径 - (Matlab建模)

    Floyd算法又称为弗洛伊德算法.插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算 ...

  4. 最短路径 floyd java_java实现Floyd算法求最短路径

    关于无向图的最短路径问题: 这个程序输出:最短路径矩阵 例如:W[0][5]=9 代表vo->v5的最短路径为9 W=: 0 1 3 7 4 9 1 0 2 6 3 8 3 2 0 4 1 6 ...

  5. 佛洛依德算法求最短路径实例

    佛洛依德算法求最短路径实例 #include <iostream> #include <string.h> #include <stdlib.h> #include ...

  6. Floyd算法求解最短路径

    Floyd算法求解最短路径 1.算法概述 2.算法实例 3.算法实战 3.1 算法描述 3.2 解题思路 3.3 代码实现 1.算法概述   Floyd算法又称为插点法,是一种利用动态规划的思想寻找给 ...

  7. Floyd算法求无向图最小环

    原理可看菊苣博文:http://www.cnblogs.com/khan724/p/4383686.html 自己代码中解释一些小细节.该算法适用于无向图,而有向图的最小环,实际上就是初始化所有点为i ...

  8. C++迪杰斯特拉算法求最短路径

    一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...

  9. 【编程实践】Raft 算法的原理 go代码实例

    文章目录 Raft 算法的原理 & go代码实例 Raft 算法的原理 使用 Go 语言实现的简单 Raft 算法示例 Raft 算法的原理 & go代码实例 Raft 算法的原理 R ...

最新文章

  1. 安卓的自定义的DemoApplication 出现的问题。
  2. Find a way
  3. boost::phoenix::bind相关的测试程序
  4. GDOI2018-《被虐记》
  5. 题目1001:A+B for Matrices
  6. MFC通过txt查找文件并进行复制-备忘
  7. 【技术】Java打印菱形
  8. 集成电路设计的运作模式
  9. Java性能优化的50个细节(珍藏版)
  10. 计算机技术在风景园林中的应用和选择,现代信息技术在风景园林中的应用
  11. pytorch中为Module和Tensor指定GPU
  12. Android Studio 搭建微信界面
  13. 微信支付 django
  14. 财经APP富途/老虎/雪盈 牌照分析
  15. LeetCode-分数排名
  16. java 双列集合Map 万字详解
  17. 软件测试的压力测试的性能指标,压力测试主要指标有哪些
  18. 切比雪夫------切比雪夫不等式
  19. 面经|小米-未来星-数据科学家|一面|70min
  20. 如何选择社群裂变工具?快鲸scrm社群裂变工具优势明显

热门文章

  1. 【微服】单体、SOA、微服务
  2. 微服系列之Feign使用HttpClient和OkHttp网络请求框架
  3. eclipse源码中文注释乱码问题解决方法
  4. dava靶场远程命令执行
  5. Web漏洞-XXE漏洞(详细)
  6. 一些前端大牛都在学习的github库
  7. python随机库函数_python标准库中的随机分布函数
  8. nginx服务器代理设置
  9. prometheus 监控概述
  10. java实现回文数算法