floyd算法与dijstra算法可以相互验证,或者相互比较,充实论文内容
tulun2.m
a= [ 0,50,inf,40,25,10;
50,0,15,20,inf,25;
inf,15,0,10,20,inf;
40,20,10,0,10,25;
25,inf,20,10,0,55;
10,25,inf,25,55,0];
[D, path]=floyd(a)
floyd.m
function [D,path,min1,path1]=floyd(a,start,terminal)
D=a;n=size(D,1);path=zeros(n,n);
for i=1:n
for j=1:n
if D(i,j)~=inf
path(i,j)=j;
end,
end,
end
for k=1:n
for i=1:n
for j=1:n
if D(i,k)+D(k,j)<D(i,j)
D(i,j)=D(i,k)+D(k,j);
path(i,j)=path(i,k);
end,
end,
end,
end
if nargin==3
min1=D(start,terminal);
m(1)=start;
i=1;
path1=[ ];
while path(m(i),terminal)~=terminal
k=i+1;
m(k)=path(m(i),terminal);
i=i+1;
end
m(i+1)=terminal;
path1=m;
end
与上一章题目结果进行对比:
>> tulun2
D =
0 8 11 16 17 16 7 8 17 19 21
31 0 3 8 9 11 8 23 14 16 18
28 36 0 5 6 8 5 20 11 13 15
23 31 7 0 1 3 12 15 6 8 10
22 30 6 11 0 2 11 14 5 7 9
20 28 8 13 2 0 9 12 3 5 7
29 37 17 22 11 9 0 21 12 14 16
8 16 19 24 16 18 15 0 9 11 13
17 25 13 18 7 9 18 9 0 2 4
19 27 15 20 9 11 20 11 2 0 2
32 40 16 21 10 12 21 24 15 17 0
path =
1 2 2 2 2 7 7 8 8 8 8
3 2 3 3 3 3 3 3 3 3 3
5 5 3 4 5 5 7 5 5 5 5
5 5 5 4 5 5 5 5 5 5 5
6 6 3 3 5 6 3 6 6 6 6
9 9 5 5 5 6 7 9 9 9 9
6 6 6 6 6 6 7 6 6 6 6
1 1 1 1 9 9 1 8 9 9 9
8 8 5 5 5 5 5 8 9 10 10
9 9 9 9 9 9 9 9 9 10 11
5 5 5 5 5 5 5 5 5 5 11