返回信息流新手求轻喷。。
题目见图,将节点分别用数字标号。
代码如下:
新建一个空白脚本,添加函数代码,并保存在工作目录下,命名为函数名的m文件。即minroute.m。该文件的内容,只包含函数本身。如下:
function [S,D]=minroute(i,m,W,opt)
if nargin<4
opt=0; end
dd=[];tt=[];
ss=[];ss(1,1)=i;
V=1:m;V(i)=[];
dd=[0;i];
kk=2;
[mdd,ndd]=size(dd);
while ~isempty(V)
[tmpd,j]=min(W(i,V));
tmpj=V(j );
for k=2:ndd
[tmp1,jj]=min(dd(1,k)+W(dd(2,k),V));
tmp2=V(jj);
tt(k-1,:)=[tmp1,tmp2,jj];
end
tmp=[tmpd,tmpj,j;tt];
[tmp3,tmp4]=min(tmp(:,1));
if tmp3==tmpd
ss(1:2,kk)=[i;tmp(tmp4,2)];
else
tmp5=find(ss(:,tmp4)~=0);
tmp6=length(tmp5);
if dd(2,tmp4)==ss(tmp6,tmp4)
ss(1:tmp6+1,kk)=[ss(tmp5,tmp4);tmp(tmp4,2)];
else
ss(1:3,kk)=[i;dd(2,tmp4);tmp(tmp4,2)];
end
end
dd=[dd,[tmp3;tmp(tmp4,2)]];
V(tmp(tmp4,3))=[];
[mdd,ndd]=size(dd);
kk=kk+1;
end
if opt==1
[tmp,t]=sort(dd(2,:));
S=ss(:,t);
D=dd(1,t);
else
S=ss;
D=dd(1,:);
end
2.在控制台(或者其他的m文件)调用该函数。
代码如下:
w=inf*ones(11);
w(1,[2,3,4])=[5,4,3];
w(2,[5,6])=[8,5];
w(3,6)=[4];
w(4,[5,6,7])=[9,4,9];
w(5,[8,9])=[4,2];
w(6,[9,10])=[2,1];
w(7,[9,10])=[2,8];
w(8,11)=[9];
w(9,11)=[2];
w(10,11)=[3];
[s1,d1]=minroute(1,11,w,1)
执行结果
s1 =
1 1 1 1 1 1 1 1 1 1 1
0 2 3 4 4 4 4 4 4 4 4
0 0 0 0 5 6 7 5 6 6 6
0 0 0 0 0 0 0 8 9 10 10
0 0 0 0 0 0 0 0 0 0 11
d1 =
0 5 4 3 12 7 12 16 9 8 11
>>
问题:我明明只是把点从1-11进行标号,结果d1里的0、12、16是咋回事?
应该是源代码不对?求大神解释,顺便修改、编译一下下,跪谢!!跪谢!![ema23][ema23][ema23]
这是一条镜像帖。来源:北邮人论坛 / matlab / #12108同步于 2016/6/11
Matlab机器人发帖
[问题]用MATLAB做Dijsktra最短路,结果为何莫名其妙?
avirl108
2016/6/11镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。