matlab代码---floyd最短路问题

例 9 某公司在六个城市 c1, c2, …c6 中有分公司,从 i
ci到cj的直接航程票价记在下述矩阵的(I,j)位置上。(∞表示无直接航路),请帮助该公司设计一张城市c1到其它城市间的票价最便宜的路线图。
matlab代码---floyd最短路问题_第1张图片
matlab代码---floyd最短路问题_第2张图片`clc,clear
a=zeros(6);
a(1,2)=50;a(1,4)=40;a(1,5)=25;a(1,6)=10;
a(2,3)=15;a(2,4)=20;a(2,6)=25;
a(3,4)=10;a(3,5)=20;
a(4,5)=10;a(4,6)=25;
a(5,6)=55;
a=a+a’;
a(find(a0))=inf;
pb(1:length(a))=0;pb(1)=1;index1=1;index2=ones(1,length(a));
d(1:length(a))=inf;d(1)=0;temp=1;
while sum(pb) tb=find(pb
0);
d(tb)=min(d(tb),d(temp)+a(temp,tb));
tmpb=find(d(tb)==min(d(tb)));
temp=tb(tmpb(1));
pb(temp)=1;
index1=[index1,temp];
temp2=find(d(index1)==d(temp)-a(temp,index1));
index2(temp)=index1(temp2(1));
end
d, index1, index2

`

用Floyd算法求解例9。
矩阵path用来存放每对顶点之间最短路径上所经过的顶点的序号。Floyd算法的
Matlab程序如下:

clear;clc; 
n=6; a=zeros(n); 
a(1,2)=50;a(1,4)=40;a(1,5)=25;a(1,6)=10; 
a(2,3)=15;a(2,4)=20;a(2,6)=25; a(3,4)=10;a(3,5)=20; 
a(4,5)=10;a(4,6)=25; a(5,6)=55; 
a=a+a'; M=max(max(a))*n^2; %M为充分大的正实数
a=a+((a==0)-eye(n))*M; 
path=zeros(n); 
for k=1:n 
   for i=1:n 
      for j=1:n 
         if a(i,j)>a(i,k)+a(k,j) 
            a(i,j)=a(i,k)+a(k,j); 
            path(i,j)=k; 
         end 
      end 
   end 
end 
a, path 

你可能感兴趣的:(matlab)