弗洛伊德算法---F运算(可能有些人有点疑惑)

本文介绍了一个用于寻找所有顶点对最短路径的Floyd算法实现。该算法通过迭代改进距离矩阵来更新每一对顶点之间的最短路径,并记录下经过的中间节点形成路由矩阵。最后,通过输出函数展示从起点到终点的具体路径。

                       % 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(填入已知的矩阵),确定运行即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值