floyd算法,简单的来说,就是算出n个点任意两个点之间的最短距离,类似于三角形任意两边之和大于第三边,画了个图,(图咋不好看,注意领会精神)
然后就可以,算出从a到b的所有距离,留下最优的那一组(即最小的)储存,同样,a和c以及b和c之间的距离也可以输出,最后就可以得到3x3的一个矩阵(3个地点,主对角线为自己到自己的距离),以此类推,当n个点时原理相同。
function [S, P]=FloydSPR(AdjMax)
N=min(length(AdjMax(:,1)),length(AdjMax(1,:)));
P=-1*ones(N,N);
S=AdjMax;
for k=1:N
for i=1:N
for j=1:N
if S(i,k)==inf
continue;
end
if S(k,j)==inf
continue;
end
if S(i,j)>S(i,k)+S(k,j)
if P(i,k)==-1
P(i,j)=k;
else
P(i,j)=P(i,k);
end
S(i,j)=S(i,k)+S(k,j);
end
end
end
end