全部版块 我的主页
论坛 提问 悬赏 求职 新闻 读书 功能一区 学习笔记1.0
850 0
2011-02-14
用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;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群