文章目录
- 1. 某公司在六个城市 C 1 , C 2 , … , C 6 C_1,C_2,…,C_6 C1,C2,…,C6中都有分公司,从 C i 到 C j C_i到C_j Ci到Cj的直接航程票价由下述矩阵的第(i,j)元素给出(∞表示无直达航班),该公司想算出一张任意两个城市之间最廉价路线表:
- 2. 求图中每一结点到其他结点的最短路.
- 3. 在一个城市交通系统中取出一段如下图所示, 其入口为顶点 v1, 出口为顶点 v8. 每条弧段旁的数字表示通过该路段所需的时间. 每次转弯需要附加时间为 3 秒.求 v1 到 v8 的最短时间路径.
- 4. 有四个工件等待在同一台机器上加工,若加工的先后次序可以任意,各工件之间的调整时间如下表,试确定最优加工顺序.
参考教材:《数学建模与教学实验》第5版
提示:以下是本篇文章正文内容,来自参考教材课后习题。
1. 某公司在六个城市 C 1 , C 2 , … , C 6 C_1,C_2,…,C_6 C1,C2,…,C6中都有分公司,从 C i 到 C j C_i到C_j Ci到Cj的直接航程票价由下述矩阵的第(i,j)元素给出(∞表示无直达航班),该公司想算出一张任意两个城市之间最廉价路线表:
票价矩阵:
(
0
50
∞
40
25
10
50
0
15
20
∞
25
∞
15
0
10
20
∞
40
20
10
0
10
25
25
∞
20
10
0
55
10
25
∞
25
55
0
)
\left( \begin{matrix} 0& 50& \infty& 40& 25& 10\\ 50& 0& 15& 20& \infty& 25\\ \infty& 15& 0& 10& 20& \infty\\ 40& 20& 10& 0& 10& 25\\ 25& \infty& 20& 10& 0& 55\\ 10& 25& \infty& 25& 55& 0\\\end{matrix} \right)
050∞4025105001520∞25∞1501020∞4020100102525∞20100551025∞25550
matlab解题:
floyd算法:计算每对顶点之间最短路
创建floyd函数:
function[D,R] = floyd(a)
n = size(a,1);
D = a
for i = 1:n
for j =1:n
R(i,j) = j;
end
end
R
for K = 1:n
for i = 1:n
for j = 1:n
if D(i,K) + D(K,j) < D(i,j)
D(i,j) = D(i,K) + D(K,j);
R(i,j) = R(i,K);
end
end
end
K
D
R
end
创建main函数调用:
% 加权图:带权邻接矩阵
a = [0 50 inf 40 25 10;
50 0 15 20 inf 25;
inf 15 0 10 20 inf;
40 20 10 0 10 25;
25 inf 20 10 0 55;
10 25 inf 25 55 0];
[D,R] = floyd(a)
C
1
−
C
2
:
1
−
6
−
2
;
35
C_1-C_2:1-6-2;35
C1−C2:1−6−2;35
C
1
−
C
3
:
1
−
5
−
3
,
1
−
6
−
4
−
3
;
45
C_1-C_3:1-5-3,1-6-4-3;45
C1−C3:1−5−3,1−6−4−3;45
C
1
−
C
4
:
1
−
6
−
4
,
1
−
5
−
4
;
35
C_1-C_4:1-6-4,1-5-4;35
C1−C4:1−6−4,1−5−4;35
C
1
−
C
5
:
1
−
5
;
25
C_1-C_5:1-5;25
C1−C5:1−5;25
C
1
−
C
6
:
1
−
6
;
10
C_1-C_6:1-6;10
C1−C6:1−6;10
C
2
−
C
3
:
2
−
3
;
15
C_2-C_3:2-3;15
C2−C3:2−3;15
C
2
−
C
4
:
2
−
4
;
20
C_2-C_4:2-4;20
C2−C4:2−4;20
C
2
−
C
5
:
2
−
4
−
5
;
30
C_2-C_5:2-4-5;30
C2−C5:2−4−5;30
C
2
−
C
6
:
2
−
6
;
25
C_2-C_6:2-6;25
C2−C6:2−6;25
C
3
−
C
4
:
3
−
4
;
10
C_3-C_4:3-4;10
C3−C4:3−4;10
C
3
−
C
5
:
3
−
5
,
3
−
4
−
5
;
20
C_3-C_5:3-5,3-4-5;20
C3−C5:3−5,3−4−5;20
C
3
−
C
6
:
3
−
4
−
6
;
35
C_3-C_6:3-4-6;35
C3−C6:3−4−6;35
C
4
−
C
5
:
4
−
5
;
10
C_4-C_5:4-5;10
C4−C5:4−5;10
C
4
−
C
6
:
4
−
6
;
25
C_4-C_6:4-6;25
C4−C6:4−6;25
C
5
−
C
6
:
5
−
4
−
6
;
35
C_5-C_6:5-4-6;35
C5−C6:5−4−6;35
2. 求图中每一结点到其他结点的最短路.
同第一题,修改输入矩阵:
(
0
3
10
∞
∞
∞
∞
∞
3
0
∞
5
∞
∞
∞
∞
10
∞
0
6
∞
∞
∞
∞
∞
5
6
0
4
∞
10
∞
∞
∞
∞
4
0
9
5
∞
∞
∞
∞
∞
9
0
3
4
∞
∞
∞
10
5
3
0
6
∞
∞
∞
∞
∞
4
6
0
)
\left( \begin{matrix} 0& 3& 10& \infty& \infty& \infty& \infty& \infty\\ 3& 0& \infty& 5& \infty& \infty& \infty& \infty\\ 10& \infty& 0& 6& \infty& \infty& \infty& \infty\\ \infty& 5& 6& 0& 4& \infty& 10& \infty\\ \infty& \infty& \infty& 4& 0& 9& 5& \infty\\ \infty& \infty& \infty& \infty& 9& 0& 3& 4\\ \infty& \infty& \infty& 10& 5& 3& 0& 6\\ \infty& \infty& \infty& \infty& \infty& 4& 6& 0\\\end{matrix} \right)
0310∞∞∞∞∞30∞5∞∞∞∞10∞06∞∞∞∞∞5604∞10∞∞∞∞4095∞∞∞∞∞9034∞∞∞105306∞∞∞∞∞460
3. 在一个城市交通系统中取出一段如下图所示, 其入口为顶点 v1, 出口为顶点 v8. 每条弧段旁的数字表示通过该路段所需的时间. 每次转弯需要附加时间为 3 秒.求 v1 到 v8 的最短时间路径.
matlab求解:
v12 = 1;v23 = 3;v24 = 2;v35 = 1;v47 = 2;v56 = 6;v57 = 2;v68 = 3;v78 = 4;fujia = 3;
f1 = v12+v23+v35+v56+fujia+v68;
f2 = v12+v23+v35+fujia+v57+fujia+v78;
f3 = v12+fujia+v24+fujia+v47+v78;
min = f1;
if f2 < min
min = f2;
end
if f3 < min
min = f3;
end
min
f1
f2
f3
最短路径为15,v1-v2-v4-v7-v8。
4. 有四个工件等待在同一台机器上加工,若加工的先后次序可以任意,各工件之间的调整时间如下表,试确定最优加工顺序.
A | B | C | D | |
---|---|---|---|---|
A | 0 | 15 | 20 | 5 |
B | 30 | 0 | 30 | 15 |
C | 25 | 25 | 0 | 15 |
D | 20 | 35 | 10 | 0 |
matlab求解:
clear;clc
l=[ 0 15 20 5
30 0 30 15
25 25 0 16
20 35 10 0];
n=length(l(1,:));%l为A,B,C,D之间构成的邻接矩阵
y=zeros(1,n);
mi=l(1,2)+l(2,3)+l(3,4);%假设最优顺序为A→B→C→D,mi为最短调整时间
for i=1:n %从A到D依次开始
for j=1:n
if (i~=j)
for s=1:n
if (j~=s&&s~=i)
for t=1:n
if (t~=s&&t~=i&&t~=j)
if mi>l(i,j)+l(j,s)+l(s,t)
mi=l(i,j)+l(j,s)+l(s,t);
y(1)=i;y(2)=j;y(3)=s;y(4)=t;
end
end
end
end
end
end
end
end
mi
y
总时间最小为:40;顺序为:ABDC