『matlab求救贴』有关最短路径的运输问题用的是Dijkstra 算法
题目是给50个点设计运输路径 起始点为30,40客户数:50
车辆装载量:160
配送中心坐标:
xy
3040
客户坐标及需求:
xyq
3040
37527
494930
526416
20269
403021
214715
176319
316223
523311
51215
424119
313229
52523
124221
361610
524115
27233
173341
13139
575828
62428
42578
165716
85210
73828
27687
304815
436714
58486
582719
376911
384612
461023
613326
626317
63696
32229
453515
591514
567
101727
211013
56411
301516
391010
32395
253225
255517
482818
563710
clc
clear all
a=[5 25;5 6;5 64;7 38;8 52;10 17;12 42;13 13;16 57;17 63;17 33;20 26;
21 47;21 10;25 32;25 55;27 23;27 68;30 48;30 15;31 62;31 32;32 22;32 39;
36 16;37 52;37 69;38 46;39 10;40 30;42 41;42 57;43 67;45 35;46 10;48 28;
49 49;51 21;52 64;52 33;52 41;56 37;57 58;58 48;58 27;59 15;61 33;62 42;
62 63;63 69];%51个坐标
for i=1:51
for j=1:51
t=a(i,:)-a(j,:);
c(i,j)=sqrt(t(1)^2+t(2)^2);
end
end
a= ;%之前存在的通路
b=zeros(51);
for i=1:414
b(a(i,1)+1,a(i,2)+1)=1;
b(a(i,2)+1,a(i,1)+1)=1;
end
a=b.*c;
for i=1:51
for j=1:51
if a(i,j)==0
a(i,j)=inf;
end
if i==j
a(i,j)=0;
end
end
end
w=a;
for p=1:51
n=size(w,1);
for i=1:n
l(i)=w1(i);
z(i)=1;
end
s=[];
s(1)=1;
u=s(1);
k=1;
while k<n
for i=1:n
for j=1:k
if i~=s(j)
if l(i)>l(u)+w(u,i)
l(i)=l(u)+w(u,i);
z(i)=u;
end
end
end
end
ll=l;
for i=1:n
for j=1:k
if i~=s(j)
ll(i)=ll(i);
else
ll(i)=inf;
end
end
end
lv=inf;
for i=1:n
if ll(i)<lv
lv=ll(i);
v=i;
end
end
s(k+1)=v;
k=k+1;
u=s(k);
end
if p==1
a=l;
t=z;
else
a=;
t=;
end
end
for i=1:51
a(i,i)=inf;
end
save w.txt a -ascii ;
save t.txt t -ascii ;
clc
clear all
a=[30 40;5 25;5 6;5 64;7 38;8 52;10 17;12 42;13 13;16 57;17 63;17 33;20 26;
21 47;21 10;25 32;25 55;27 23;27 68;30 48;30 15;31 62;31 32;32 22;32 39;
36 16;37 52;37 69;38 46;39 10;40 30;42 41;42 57;43 67;45 35;46 10;48 28;
49 49;51 21;52 64;52 33;52 41;56 37;57 58;58 48;58 27;59 15;61 33;62 42;
62 63;63 69];
for i=1:51
for j=1:51
t=a(i,:)-a(j,:);
c(i,j)=sqrt(t(1)^2+t(2)^2);
end
end
a= [1 2;1 4;1 5;1 9;1 10;2 3;2 4;2 6;2 7;2 11;2 12;3 6;3 8;3 14;4 5;4 7;4 9;4 11;4
6;5 7;5 9;6 7;6 12;6 8;7 8;7 9;7 13;7 16;7 11;7 51;8 11;8 12;8 14;9 11;9 13;9 16;9
18;9 10;10 16;10 18;10 21;10 5;10 13;11 12;11 13;11 51;11 15;11 14;11 6;11 17;12
14;12 15;12 13;12 17;12 20;12 51;12 19;12 22;13 15;13 16;13 18;13 19;13 51;14 7;14
15;14 17;14 23;14 20;14 29;14 51;15 16;15 19;15 51;15 22;15 23;15 17;15 35;16 18;16
21;16 32;16 26;16 19;16 51;16 33;17 51;17 22;17 23;17 25;17 20;17 29;17 30;18 19;18
51;18 30;18 21;18 32;18 33;18 27;18 39;18 1;19 2119 27;19 26;19 28;19 31;19 51;19
24;19 30;19 37;20 22;20 23;20 25;20 29;20 30;21 27;21 33;21 32;21 26;21 28;21 51;22
51;22 24;22 30;22 31;22 25;22 23;22 35;22 28;23 24;23 28;23 30;23 25;23 31;23 35;24
26;24 28;24 31;24 34;24 30;24 25;24 35;24 29;24 2124 27;24 16;24 15;25 51;25 28;25
30;25 34;25 36;25 38;25 35;25 29;26 27;26 33;26 32;26 37;26 31;26 28;26 43;26 41;26
51;27 28;27 31;27 32;27 33;27 51;28 33;28 32;28 39;28 37;28 41;28 31;28 34;28 35;28
30;28 29;28 51;29 30;29 31;29 34;29 41;29 36;29 40;29 38;29 35;29 51;30 31;30 32;30
37;30 34;30 40;30 36;30 38;30 35;30 51;31 32;31 33;31 34;31 39;31 37;31 41;31 40;31
35;31 51;32 51;32 33;32 39;32 43;32 44;32 37;32 41;32 40;32 34;32 36;32 42;32 49;33
51;33 50;33 49;33 39;33 43;33 44;33 37;33 48;33 47;33 36;33 38;33 42;34 33;34 39;34
37;34 41;34 40;34 36;34 35;34 42;34 45;34 46;34 47;34 48;34 43;34 49;34 51;8 17;35
51;35 36;35 40;35 38;35 47;35 45;35 46;35 41;11 19;7 18;1 13;2 13;5 16;9 21;9 51;9
19;36 51;36 37;36 39;36 41;36 49;36 44;36 40;36 48;36 47;36 38;36 46;36 45;37 51;37
50;37 39;37 43;37 44;37 48;37 41;37 42;37 38;37 35;38 39;38 40;38 41;38 42;38 43;38
44;38 45;38 46;38 47;38 48;39 41;39 50;39 49;39 48;39 47;39 46;39 45;39 44;39 43;39
42;39 41;39 51;40 41;40 42;40 43;40 44;40 45;40 46;40 47;40 48;40 49;40 50;41 42;41
43;41 44;41 45;41 46;41 47;41 48;41 49;41 50;42 51;42 43;42 44;42 45;42 46;42 47;42
48;42 49;42 50;43 51;43 44;43 45;43 46;43 47;43 48;43 49;43 50;44 51;44 45;44 46;44
47;44 48;44 49;44 50;45 24;45 46;45 47;45 48;45 49;45 50;46 47;46 49;46 50;47 51;47
48;47 49;47 50;48 49;48 50;49 50;49 51;50 51;51 10;51 5;51 4;51 6;51 20;51 2;8 13;8
15;6 20;6 14;14 2;3 29;29 46;20 46;3 20;3 12;3 7;3 4;5 6;1 7;5 18;5 21;5 15;7 15;11
16;12 16;9 12;7 17;4 12;4 14;11 21;16 17;13 14;1 16;9 27;1 11;4 18;13 22;13 23;6 23;7
19;5 19;5 13;4 15;2 15;2 20;2 17];
b=zeros(51);
for i=1:414
b(a(i,1)+1,a(i,2)+1)=1;
b(a(i,2)+1,a(i,1)+1)=1;
end
a=b.*c;
for i=1:51
for j=1:51
if a(i,j)==0
a(i,j)=inf;
end
if i==j
a(i,j)=0;
end
end
end
w=a;
for p=1:51
n=size(w,1);
for i=1:n
l(i)=w1(i);
z(i)=1;
end
s=[];
s(1)=1;
u=s(1);
k=1;
while k<n
for i=1:n
for j=1:k
if i~=s(j)
if l(i)>l(u)+w(u,i)
l(i)=l(u)+w(u,i);
z(i)=u;
end
end
end
end
ll=l;
for i=1:n
for j=1:k
if i~=s(j)
ll(i)=ll(i);
else
ll(i)=inf;
end
end
end
lv=inf;
for i=1:n
if ll(i)<lv
lv=ll(i);
v=i;
end
end
s(k+1)=v;
k=k+1;
u=s(k);
end
if p==1
a=l;
t=z;
else
a=;
t=;
end
end
for i=1:51
a(i,i)=inf;
end
一直在报错
你第一个a矩阵只包含50个坐标,是不是输掉了?你后面引用a(51,:)肯定会报错啊,你先检查一下那个坐标输掉了!
你先试一下,如果还有其他什么问题,再发出来看看!
页:
[1]