Floyd算法的MATLAB代码

 例题:

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

Floyd算法的MATLAB代码_第1张图片

 图1 公交车线路

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

Floyd算法的MATLAB代码_第2张图片

 根据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,其他依此类推。

你可能感兴趣的:(数学建模,算法,matlab,开发语言,图论)