实验目的

  掌握动态规划算法和最短路径求法,利用最短路径知识结合实际问题建立数学模型。

实验要求

  实验步骤要有模型建立,模型求解、结果分析。

实验内容

  (1)某公司在六个城市C1,C2,C3,C4,C5,C6中都有分公司,从CiCj的直达航班票价由下述矩阵的第i行、第j列元素给出(∞表示无直达航班),该公司想算出一张任意两个城市之间最廉价路线表,试作出这样的表来

Matlab最短路问题  (2)求图5-28中每一结点到其他结点的最短路

Matlab最短路问题

  (3)一只狼、一只羊和一筐白菜在河的一岸,一个摆渡人想把它们渡过河去,但是由于他的船很小,每次只能带走它们之中的一样,由于明显的原因,狼和羊或者羊和白菜在一起需要人看守,问摆渡人怎样把它们渡过河去?

实验步骤

(1)解:该公司想算出一张任意两个城市之间最廉价路线表,可把这个路线表抽象成一副带权的无向图,于是问题等价于求每对顶点之间最短的问题。本题使用Floyd算法,用MATLAB编程求解

Matlab最短路问题  首先,编写floyd.m文件,代码如下,

 1 %Floyd算法——每对顶点间的最短路径算法
 2 %输入:带权邻接矩阵w(i,j).
 3 %输出:距离矩阵D(i,j),R(i,j)
 4 function [d,r]=floyd(w)
 5 [m,n]=size(w);
 6 if n~=m
 7     error('输入的邻接矩阵行数不等于列数!!!');
 8 end    
 9 %预分配内存空间
10 d=zeros(n,n);
11 r=zeros(n,n);
12 %赋初值
13 for i=1:n
14     for j=1:n
15         d(i,j)=w(i,j);
16         r(i,j)=j;
17     end
18 end
19 k=1;
20 %更新d,r
21 while k<=n
22     for i=1:n
23         for j=1:n
24             if d(i,k)+d(k,j)<d(i,j)
25                 d(i,j)=d(i,k)+d(k,j);
26                 r(i,j)=r(i,k);
27             end
28         end
29     end
30     k=k+1;
31 end
32 end
floyd.m

相关文章: