matlab floyd 算法注释function [D,R]=floyd(A) %用floyd算法实现求任意两点之间的最短路程.可以有负权 %参数D为连通图的权矩阵 % A=[0 2 8 1 inf inf inf inf % 2 0 6 inf 1 inf inf inf % 8

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 22:01:43
matlab floyd 算法注释function [D,R]=floyd(A) %用floyd算法实现求任意两点之间的最短路程.可以有负权 %参数D为连通图的权矩阵 % A=[0   2   8   1  inf    inf   inf   inf %    2   0   6   inf  1    inf   inf   inf %    8

matlab floyd 算法注释function [D,R]=floyd(A) %用floyd算法实现求任意两点之间的最短路程.可以有负权 %参数D为连通图的权矩阵 % A=[0 2 8 1 inf inf inf inf % 2 0 6 inf 1 inf inf inf % 8
matlab floyd 算法注释
function [D,R]=floyd(A)
%用floyd算法实现求任意两点之间的最短路程.可以有负权
%参数D为连通图的权矩阵
% A=[0 2 8 1 inf inf inf inf
% 2 0 6 inf 1 inf inf inf
% 8 6 0 7 5 1 2 inf
% 1 inf 7 0 inf inf 9 inf
% inf 1 5 inf 0 3 inf 8
% inf inf 1 inf 3 0 4 6
% inf inf 2 9 inf 4 0 3
% inf inf inf inf 8 6 3 0];
D=A;n=length(D);
for i=1:n
for j=1:n
R(i,j)=i;%赋路径初值
end
end
for k=1:n
for i=1:n
for j=1:n
if D(i,k)+D(k,j)

matlab floyd 算法注释function [D,R]=floyd(A) %用floyd算法实现求任意两点之间的最短路程.可以有负权 %参数D为连通图的权矩阵 % A=[0 2 8 1 inf inf inf inf % 2 0 6 inf 1 inf inf inf % 8
A矩阵是邻接矩阵,对角线上为o,其余位置数字表示的是两点之间距离,比如A(1,2)=2,表示从第一个点到第二个点的距离为2.inf是无穷大的意思,这里表示没有直接沟通这两点的路.
n=length(D);设定n为D矩阵的长度.
接下来的两重循环,得到的R矩阵是n*n的矩阵,它每个数据表示的是路径,比如:R(1,3)=1;表示路径为:1-1-3.这里是初始化路径了.
后面的三重循环是floyd算法的关键所在,就是更新路线了.里面的那个判断指的是:
假设有3个点,1 2 3;如果我从1-2-3之间总距离小于1-3的距离,那么我R(1,3)=2;这就是选取更近的路线了.
最后的两个判断是为了不让曾经走过的点再次被遍历.就是不回头的意思了,这个一般都可以忽略了,你照打上去就是了.
不知道这样的解释你是否满意.