最短路求两点间最短路的Floyd算法及其matlab实现
Posted 这是小魔仙的账户
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路求两点间最短路的Floyd算法及其matlab实现相关的知识,希望对你有一定的参考价值。
代码来源:《图论算法及其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:n 11 for j=1:n 12 if U(i,j)>U(i,m)+U(m,j) 13 U(i,j)=U(i,m)+U(m,j); %更新dij 14 end 15 end 16 end 17 m=m+1; 18 end 19 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~=1 28 for i=1:n 29 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 end 35 end 36 end 37 k=1; 38 wrow=find(P1~=0); 39 for j=length(wrow):(-1):1 40 P(k)=P1(wrow(j)); 41 k=k+1; 42 end 43 44 end
验证:
n=12; a=ones(n)+inf; for i=1:n a(i,i)=0; end a(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 12
u =
29
以上是关于最短路求两点间最短路的Floyd算法及其matlab实现的主要内容,如果未能解决你的问题,请参考以下文章
最短路求两点间最短路径的改进的Dijkstra算法及其matlab实现
a*算法求最短路径和floyd还有dijsktra算法求最短路径的区别?