博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【最短路】求两点间最短路的Floyd算法及其matlab实现
阅读量:4562 次
发布时间:2019-06-08

本文共 1102 字,大约阅读时间需要 3 分钟。

代码来源:《图论算法及其matlab实现》(北京航空航天出版社)

P22

 

 

 

此代码返回第一个点和最后一个点之间最短路径,以及最短路径的长度。

代码如下:

 

1 function [P,u ] = Floyd(W) 2 %W表示权值矩阵 3 %P表示最短路径 4 %u表示最短路的权和 5 n=length(W); 6 U=W; 7 m=1; 8  9 while m<=n   %判断是否满足停止条件10     for i=1:n11         for j=1:n12             if U(i,j)>U(i,m)+U(m,j)13                 U(i,j)=U(i,m)+U(m,j);   %更新dij14             end15         end16     end17     m=m+1;18 end19 u=U(1,n);20 21 %输出最短路的顶点22 P1=zeros(1,n);23 k=1;24 P1(k)=n;25 V=ones(1,n)*inf;26 kk=n;27 while kk~=128     for i=1:n29         V(1,i)=U(1,kk)-W(i,kk);30         if V(1,i)==U(1,i)31             P1(k+1)=i;32             kk=i;33             k=k+1;34         end35     end36 end37 k=1;38 wrow=find(P1~=0);39 for j=length(wrow):(-1):140     P(k)=P1(wrow(j));41     k=k+1;42 end                               43 44 end

验证:

n=12;a=ones(n)+inf;for i=1:na(i,i)=0;enda(1,2)=5;a(2,3)=8;a(2,6)=5;a(3,4)=3;a(3,9)=10;a(4,5)=5;a(4,7)=3;a(5,6)=2;a(7,8)=2;a(8,9)=4;a(8,11)=6;a(9,10)=3;a(10,11)=5;a(10,12)=3;[P u ] = Floyd(a)

运行结果:

P =     1     2     3     9    10    12u =    29

 

转载于:https://www.cnblogs.com/this-is-bbh/p/7475748.html

你可能感兴趣的文章
数据结构之排序算法二
查看>>
Mysql数据库索引的使用
查看>>
【推荐系统篇】--推荐系统之训练模型
查看>>
Mysql篇--Linux中安装Mysql
查看>>
CSS3实现图片木桶布局
查看>>
Flask入门之Virtualvenv的安装及使用(windows)
查看>>
Coder-Strike 2014 - Finals (online edition, Div. 2) B. Start Up
查看>>
(转载)软件开发模式对比(瀑布、迭代、螺旋、敏捷)
查看>>
eclipse中AndroidA工程依赖B工程设置
查看>>
Oracle - 查询
查看>>
SVN入门教程
查看>>
angular2
查看>>
24点游戏 程序(二)
查看>>
linux ----> centos 网络、tomcat、vi、等等的配置和使用
查看>>
Hive导入数据
查看>>
【剑指offer】数值的整数次方
查看>>
CentOS 7 系统服务详解
查看>>
最小生成树------Kruskal算法
查看>>
手动构建镜像
查看>>
实际描述和固定描述的取值
查看>>