function [U,S] = Floyd(d)
%FLOYD 求最短路的Floyd算法
% 格式:D为权关联矩阵矩阵
n=length(d);
U=d;
S=zeros(n,n);
for i=1:n
for j=1:n
S(i,j)=j;
end
end
for i=1:n
for j=1:n
for m=1:n
if U(i,j)>U(i,m)+U(m,j)
U(i,j)=U(i,m)+U(m,j);
S(i,j)=S(i,m);
end
end
end
end
end
在命令窗口中输入:
>> d=[0 3 5 inf inf inf;3 0 1 2 2 inf;5 1 0 inf 4 inf;inf 2 inf 0 2 4 ;inf 2 4 2 0 2;inf inf inf 4 2 0]
>> [U,S]=Floyd(d)
输出结果:
U =
0 3 4 5 5 7
3 0 1 2 2 4
4 1 0 3 3 5
5 2 3 0 2 4
5 2 3 2 0 2
7 4 5 4 2 0
S =
1 2 2 2 2 2
1 2 3 4 5 5
2 2 3 2 2 2
2 2 2 4 5 6
2 2 2 4 5 6
5 5 5 4 5 6
其中
S表示中间点矩阵如S(1,6)=2为1到6中间经过2,S(2,6)=,5为1到6中间经过5以此类推。
U表示最短路径矩阵如U(1,6)=7表示从1到6最短路径为7。