Floyd算法实现路径输出(Matlab)

本文介绍了如何使用Floyd算法在Matlab中实现最短路径的求解,并详细阐述了如何输出路径。作者强调了路径矩阵不能直接逆推,需要通过检查每两个点之间是否存在更短路径来确定正确路径。最后,提供了代码逻辑的详细解释和输出路径的方法。
摘要由CSDN通过智能技术生成

学校留了数模作业,让我们用Floyd算法求解最短路径问题,算法本身很简单,但是这个输出路径我看了很多文章都没有好好具体的写出来怎么输出,无非就是给一个路径矩阵放那里了。这里放一个我自己写的算法,能帮助到别人也算好,帮助不到的话也算给自己留个存档。  

还有一点是,我是数学专业的学生,所以写代码水平极烂,基本就是只会用for循环,我会把思路尽量写出来,大家看懂就好,我的又长又烂的代码仅供参考。

记N为点的个数,A、B均为NxN的矩阵,其中A为距离矩阵,A(i,j)的值为i城市单向到j城市的距离。

B=zeros(N,N);
for i=1:N
    B(:,i)=i;
end

B就是存储路径的矩阵,这里对其进行初始化。

for n=1:N
    for i=1:N
        for j=1:N
            if (A(i,n)+A(n,j))<A(i,j)
                A(i,j)=A(i,n)+A(n,j);
                B(i,j)= n;
            end
        end
    end
end

Floyd算法最经典的三段循环,这里n不能动,i和j可以互换。B(i,j)记录的是如果进行替换,这步是在哪里做的。比如若我们在n=3时计算出A(1,3)+A(2,3)<A(1,2),那么就记B(1,2)=3。也可以这么理解:对于某一步循环来说,B(i,j)=m指当前我计算出的从i走到j,是通过m这个点走的。

一定要注意的是,这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值