用floyd算法求图中任意两点最短距离(matlab)

本文详细介绍了如何使用Floyd算法在MATLAB中处理邻接矩阵,演示了从构建矩阵到找出两点间最短路径的过程,并结合一个实际例子解析了算法核心步骤。通过三次嵌套循环优化路径,适用于寻找图中任意两点间的最短路径,时间复杂度为O(n^3)。推荐观看相关教学视频以深入理解。
摘要由CSDN通过智能技术生成

先将如图所示的点和距离转换成临接矩阵的图

 

 matlab代码

clc, clear, a = zeros(4);
a(1,[3,4])=[10,60];  %输入邻接矩阵的上三角元素
a(2,[3,4])=[5,20]; a(3,4)=1;%将点输入4*4元素都为0的矩阵当中

n=length(a); b=a+a';  %构造完整的邻接矩阵,矩阵转置后相加
n
b(b==0)=inf; %把矩阵b中所有零元素换成inf
b
b(1:n+1:end)=0; %把对角线元素换成0  ,n为4,n+1=5,每次加5即b(1)=0,b(6)=0,b(11)=0,b(16)=0
b              %b(5)相当于b(1,1)
for k=1:n  %floyd的核心算法 
    for i=1:n
        for j=1:n
            if b(i,k)+b(k,j)<b(i,j)
                b(i,j)=b(i,k)+b(k,j);
            end
        end
    end
end
b  %显示两两顶点之间的最短距离

举个简单例子,n在这里面相当于3,k一共取3次,从0,1,2,,首先是0时表示绿色的行和列的值不改变,以0为(中转点),其他点到达中转点距离不变,所有这个代表了k从1到n最外面的大for循环。其次,两个嵌套的for循环i和j代表了除开绿色线覆盖矩阵内的点,即上图的右下角0 4 无穷 0 的矩阵。依次遍历,若找到13+10<4 则令 13+10的结果取替换4 ,但明显图中不是,不替换所以继续遍历。 b(i,k)+b(k,j)<b(i,j) 和  b(i,j)=b(i,k)+b(k,j); 你细品。

 当k=1时,此刻是最外面大for循环遍历+1,此刻1作为中转节点,绿色区域内值不变,

判断从0到2这个点间的距离开始,原本为13,但此刻利用中转点1,改变为了 0到1(6),再从1到2(4) 4+6=10<13 满足条件,因此替换。

此算法通过3个for循环,时间复杂度为n^3。建议观看下方b站链接学习。

for k=1:n  %floyd的核心算法 
    for i=1:n
        for j=1:n
            if b(i,k)+b(k,j)<b(i,j)
                b(i,j)=b(i,k)+b(k,j);
            end
        end
    end
end

这个b站up讲得特别好:链接下方

求最短路径Floyd算法!_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值