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;这就是选取更近的路线了。
最后的两个判断是为了不让曾经走过的点再次被遍历。就是不回头的意思了,这个一般都可以忽略了,你照打上去就是了。
不知道这样的解释你是否满意。
这是顷败带一个我写的Floyd算法的程序。w是图的邻接矩阵需要事先输入并保存在工作空间中,调用方法为:[D,path]=floyd(w)。给出的结果D为路径的邻接矩阵,path为路径所经过的端点顺序。
程序为:
function [D,path]=floyd(w)%D R a
n=size(w,1)
%设初值
D=w
path=zeros(n)
for i=1:n
for j=1:n
if D(i,j)~=inf
path(i,j)=j
end
end
end
%迭代,更新D path
for k=1:n
for i=1:n
for j=1:n
if 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
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)