📄 dwij2.m
字号:
function [C,LAMDA,wtemp]=Dwij2(w)
%计算从S1,S2,S3,S4,...S7到各个铁路节点的最小费用得到 7*24的矩阵
C=ones(7,24)*Inf;
wtemp=w;
wtemp(1:24,1:24)=0;
w=w(1:24,1:24);%只需要所有的铁路的接点的信息
w1=w+w';
LAMDA=zeros(7,24);
for D=1:7
T=ones(1,24)*Inf;
P=zeros(1,24);
lamda=zeros(1,24);
S=zeros(1,24);
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行所有的相临的节点
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=traincost(costsum);%调用traincost求出铁路费%记录从起点开始到这点的总费用
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
[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;
if(size(lamda,2)~=24)
lamda(1,24)=0;
end
LAMDA(D,:)=lamda;
end%end for D
%的得出总的矩阵
wtemp(1:7,1:24)=C;
wtemp=wtemp+wtemp';
wtemp(1:7,1:7)=C(1:7,1:7);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -