📄 dwij2final.m
字号:
function [C,LAMDA]=Dwij2final(w1)
%here w1 is waiting for Dwij2's return value wtemp as nargin w1
C=ones(7,14)*Inf;
LAMDA=zeros(7,38);
for D=1:7
T=ones(1,38)*Inf;
P=zeros(1,38);
lamda=zeros(1,38);
S=zeros(1,38);
k=D;
S(D)=k;
i=1;
lamda(D)=-1;
while(1)
if(length(find(S==0))==0)%判断S是否都已经解决
break;
end
sub=0;
Lsub=0;
sub=find(w1(k,:)~=0);%查找k行所有的相临的节点,得到点的标号;
% [k,sub,S(sub),S(sub)==0,find(S(sub)==0)]
if(~isempty(sub))
if(length(find(S(sub)==0))~=0)%对相临节点还没便历过的
for j=1:length(sub) %对每一个相临节点遍历,
if(S(sub(j))==0)%只有没检查时才检查,如果已经检查过了就不检查
%开始计算费用,进行运费的计算,直接相加就可以了
Lsub(1)=sub(j);
Lsub(2)=k;
v=3;
ktemp=k;
while(lamda(ktemp)~=-1)%统计到起点为止
Lsub(v)=lamda(ktemp);
ktemp=Lsub(v);
v=v+1;
end
costsum=0;%记录路线中的铁路费用
totalcost=0;
for ii=1:length(Lsub)-1%所有的相加,求出 总费用
costsum=w1(Lsub(ii),Lsub(ii+1))+costsum;
end
totalcost=costsum;%
if(T(sub(j))>totalcost)%如果T标号中的对应点比求出的总费用大,则替换T标号中的内容
T(sub(j))=totalcost;
lamda(sub(j))=k;
end
end%end if S
end%end forj
end%end if length
end %end if sub~=null
[Tv,Tvsub]=min(T);
if(Tv<Inf)
T(Tvsub)=Inf;
P(Tvsub)=Tv;%相应的最小值存入相应的P标号当中
S(Tvsub)=Tvsub;%同时把这个找到的最小值的相临的点放入S中
k=Tvsub;%把找到的相临的点作为下一个起始点
else
break;% out while所有点都找到的时候就结束此问题的一个工厂起点的搜索
end%end if Tv
i=i+1;%i递增继续
end%end while
C(D,:)=P([25:38]);
% lamdalength=size(lamda,2);
% LAMDA(D,lamdalength)=0;
if(size(lamda,2)~=38)
lamda(1,38)=0;
end
LAMDA(D,:)=lamda;
end%end for D
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -