某公司在六个城市 c1 到其它城市间的票价便宜的路线图。 

[matlab] 22.matlab图论实例  最短路问题与最小生成树 (转载)

变量解释: 

  • n 是公司个数
  • a 存储航路票价,最后结束循环存储的是最便宜票价
  • path 存储每对顶点之间最短路径上所经过的定点的序号,也就是”中转站”序号
clear;clc;
n = 6;      
a = [0 50 inf 40 25 10;
        0 0 15 20 inf 25;
        0 0 0 10 20 inf;
        0 0 0 0 10 25;
        0 0 0 0 0 55;
        0 0 0 0 0 0];  % 由于 a 是无向图,航路票价沿着正对角线对称,可以只写出右上角
a = a + a';    % 由于票价沿正对角线对称,即完整的 a 为 a + a 的转置
path = zeros(6);   % 定义 path 为 6 x 6 的矩阵
for k = 1:n
      for i = 1:n
        for j = 1:n
          if a(i,j) > a(i,k) + a(k,j)    
          % 如果从 i 城市到 j 城市的票价大于从 i 城市到 k,再从 k 到 j 城,那么 i 到 j 城肯定不是最短路径
             a(i,j)  =  a(i,k) + a(k,j);    % 更新 i 到 j 的最少票价
             path(i,j) = k;     % 同时记录下 i 到 j 的"中转站"
             % 注意下一次更新会覆盖上一次 path(i,j) 存储的,所以其实 path(i,j)中存储的 只是最后一个 "中转站"
          end
        end
      end
  end
a,path
Floyd 算法

相关文章:

  • 2022-01-05
  • 2021-06-03
  • 2021-06-23
  • 2021-08-28
  • 2021-07-27
  • 2022-12-23
  • 2022-12-23
  • 2021-11-06
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-08-16
  • 2021-05-23
  • 2021-06-09
  • 2022-12-23
  • 2022-01-01
相关资源
相似解决方案