% floyd.m
% d:矩离矩阵
% r:路由矩阵
function [d,r]=floyd(a)
% 初始化d和r
n=size(a,1);
d=a;
for i=1:n
for j=1:n
if(d(i,j)==inf)
r(i,j)=0;
elseif(i==j)
r(i,j)=0;
else
r(i,j)=j;
end
end
end
% floyd算法
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);
r(i,j)=k;
end
end
end
end
% Output.m 输出路径
function Output(r, s, dest)
% route : 路由表
% start : 起点
% dest : 终点
i = 1;
while 1
if(r(s, dest) ~= dest)
fprintf('V%s ', num2str(s));
s = r(s, dest);
else
fprintf('V%s ', num2str(s));
fprintf('V%s', num2str(dest));
break;
end
end

在命令行输入:[d,r]=floyd(填入已知的矩阵),确定运行即可。
本文介绍了一个用于寻找所有顶点对最短路径的Floyd算法实现。该算法通过迭代改进距离矩阵来更新每一对顶点之间的最短路径,并记录下经过的中间节点形成路由矩阵。最后,通过输出函数展示从起点到终点的具体路径。
3817

被折叠的 条评论
为什么被折叠?



