Floyd算法的MATLAB代码

 例题:

        现有一张城市地图如图4-10所示,图4-10中的顶点为城市,边代表两个城市间的连通关系,边上的权即为距离。每一对可达的城市间设计一条公共汽车线路,要求线路的长变在所有可能的方案里是最短的。

 图1 公交车线路

由图1可知,很显然,这个问题可以抽象成为求连通图中任意两个顶点之间的最短距离,矩阵如下:

 根据Floyd 算法的步骤对该问题进行求解,编程如下:

clc %清屏
clear all;%删除workplace变量
close all;%关掉显示图形窗口
x7=[0 1 inf inf inf 2; %DO
    1 0 4 inf inf 4 ;
    inf 4 0 2 inf 1;
    inf inf 2 0 3 3;
    inf inf inf 3 0 5;
    2 4 1 3 5 0 ] ;
n=length(x7);
path=zeros (n);%floyd最小距离法
for k=1 :n
    for i=1:n
        for j=1:n
            if x7(i,j)>x7(i,k)+x7(k,j) %节点直接连接大于中间插入的节点时
                x7(i,j)=x7(i,k)+x7(k,j);%记录更新
                path (i,j)=k;%路由号记录
            end
        end
    end
end
x7
path

输出的结果为:
x7 =

     0     1     3     5     7     2
     1     0     4     6     8     3
     3     4     0     2     5     1
     5     6     2     0     3     3
     7     8     5     3     0     5
     2     3     1     3     5     0
path =

     0     0     6     6     6     0
     0     0     0     3     6     1
     6     0     0     0     4     0
     6     3     0     0     0     0
     6     6     4     0     0     0
     0     1     0     0     0     0

        其中 path 中为o,表示不需要经过中转站,直接到达该位置。例如,path(1,2)=0,而x7(1,2)=1,表示第1站到第2站之间直接到达,表示第1站需要经过第6站台作为中转站方能抵达第3站,最短路为3,其他依此类推。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值