Floyd算法

求图中任意两点间的最短路径(Floyd算法,Matlab程序)

Floyd算法描述:

A = (aij )n×n为赋权图G = (V, E, F)的权矩阵, dij表示从vivj点的距离, rij表示从vivj点的最短路中一个点的编号
      
赋初值.对所有i, j, dij = aij,rij = j. k = 1.转向.
      
更新dij , rij .对所有i, j,dik + dk jdij ,则令dij = dik + dkj , rij = k,转向;
      
终止判断.k = n终止;否则令k = k + 1,转向.
      
最短路线可由rij得到

求下图中任意两点间的最短路 




Matlab程序:

%floyd1.m文件

function[d,r1]=floyd1(vx,vy)
b=inf;
a=[0 2 8 1 b b b b
       2 0 6 b 1 b b b
       8 6 0 7 5 1 2 b
       1 b 7 0 b b 9 b
       b 1 5 b 0 3 b 8
       b b 1 b 3 0 4 6
       b b 2 9 b 4 0 3
       b b b b 8 6 3 0 ];
d=a;
vx=vx+1;
vy=vy+1;
global r;
r=a;
for i=1:8
       for j=1:8
           d(i,j)=a(i,j);
           r(i,j)=j;
           k=1;
       end
end
for k=1:8
for i=1:8
       for j=1:8
           ifd(i,k)+d(k,j)<d(i,j)
              d(i,j)=d(i,k)+d(k,j);
              r(i,j)=k;
           end
        
           end
end
end
r1=r-1;
fun3(vx,vy);

%fun3.m文件

functionfun3(vx,vy)
global r
t=r(vx,vy);
if vy==t
      return 
else
       fun3(vx,t);
       disp(t-1);
       fun3(t,vy);
end

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值