防爆轮胎可以补吗:Matlab实现求两点间的最短路径

来源:百度文库 编辑:九乡新闻网 时间:2024/10/05 23:51:41
求下图中任意两点间的最短路 :  

 

 

Floyd算法描述:

设A = (aij )n×n为赋权图G = (V, E, F)的权矩阵, dij表示从vi到vj点的距离, rij表示从vi到vj点的最短路中一个点的编号.
       ① 赋初值. 对所有i, j, dij = aij, rij = j. k = 1. 转向②.
       ② 更新dij , rij . 对所有i, j, 若dik + dk j<dij , 则令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
           if d(i,k)+d(k,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文件

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