clear all;
close all;
A=inf*ones(16,16);
A(1,2)=5; A(1,3)=3;
A(2,1)=5; A(2,4)=1; A(2,5)=3; A(2,6)=6;
A(3,1)=3; A(3,5)=8; A(3,6)=7; A(3,7)=6;
A(4,2)=1; A(4,8)=6; A(4,9)=8;
A(5,8)=3; A(5,9)=5;
A(6,9)=3; A(6,10)=3;
A(7,9)=8; A(7,10)=4;
A(8,11)=2; A(8,12)=2;
A(9,12)=1; A(9,13)=2;
A(10,12)=1; A(10,13)=3;
A(11,14)=3; A(11,15)=5;
A(12,14)=5; A(12,15)=2;
A(13,14)=6; A(13,15)=6;
A(14,16)=4;
A(15,16)=3;
for i=1:16
for j=1:16
if i>j
A(i,j)=A(j,i);
end
end
end
Cache=A(:,1);
S=zeros(16,2);
R=[];
for k=1:20
[a,c]=min(Cache);
if c==16
break;
end
for kk=2:16
if Cache(kk)~=9999
if Cache(kk)>(Cache(c)+A(c,kk))
S(kk,1)=c;
S(kk,2)=kk;
end
Cache(kk)=min(Cache(kk),(Cache(c)+A(c,kk)));
end
end
Cache(c)=9999;
end
运行结果:
Cache =
Inf
9999
9999
9999
9999
9999
9999
9999
9999
9999
9999
9999
9999
9999
9999
18
最后一个位置:最短距离18
S =
0 0
0 0
0 0
2 4
2 5
3 6
3 7
5 8
5 9
7 10
8 11
8 12
9 13
11 14
12 15
15 16
可得最短路线:1-2-5-8-12-15-16