用matlab求解最短路编码:function l=getA(a,z)
%l表示从z点出发的最短路距离,z属于1,2 ,3, ...n
%a表示邻接矩阵
len=length(a);%长度
X=zeros(1,len);%标示一个有len个零的X矩阵
dis=inf*ones(1,len);%最短距离的矩阵
X(z)=1;%出生点的标示
dis(z)=0;%给起点赋初始值
m1=[1];
m2=ones(1,len)
d=ones(len,len)
%2
k1=a(1,:);%选取矩阵的第一行
k2=find(k1>0&k1<inf);%找到不为0和inf数值的位置
k3=k1(k2);%找到相应的值
k4=min(k3);%相应值的最小值
k5=find(k1==k4);%找到最小值的位置
k6=k5(1);%选取其中的一个
X(k6)=1;%对其进行标示
dis(k6)=k4;%标示距离值
m1=[1 k6]
%3
t=1%循环标识
while t>0
x1=find(X==1);%找已标示节点的位置
x2=find(X==0);%找到没有标示节点的位置
xn=[];
for i=1:length(x2)%对没有标示的节点进行循环
xn1=[];
for j=1:length(x1)
xn2=dis(x1(j))+a(x1(j),x2(i));%求初始节点到各个节点的距离
xn1=[xn1 xn2];%把所求距离放入矩阵
end
xn3=min(xn1);%找出各距离中的最短路径
xn=[xn xn3];
end
[xnn1 xnn2] =min(xn);%xnn1标示最短路径的值;xnn2标示它在xn里的位置
xnn3=x2(xnn2);%找到最小值的节点位置
X(xnn3)=1;%进行标示
dis(xnn3)=xnn1;%找到距离
if k6<xnn3
m1=[m1 xnn3];
m=m1(find(dis(m1)==xnn1-a(xnn3,m1)))
b=length(m)
if b>=2
c=1:b-1
m=m(c)
d(c,xnn3)=m(c)
end
end
%40
t1=sum(X);
if t1==len
t=0;%终止循环
end
end
l=dis;
m2;
d;