可以用生物信息工具箱(Bioinformatics Toolbox)的函数graphallshortestpaths求解。
实例如下:
cm = round(rand(13)*80)*0.1;
I = randperm(13^2);
cm(I(1:145))=0;
UG = sparse(tril(cm + cm'));
bg = biograph(UG,arrayfun(@(i){int2str(i)},1:size(cm,1)),'ShowArrows','off','ShowWeights','on');
view(bg)
p = graphallshortestpaths(UG,'directed',false);
num2str(p,'%6g')
其中,前4行用于随机生成一个无向图的数据(懒得输入你图中的数了),第5-6行用于显示图形,最后两行显示各节点之间的最短路径。
以下是某一次随机运行得到的结果:
最短路径:
0 8 7.5 10.7 8.3 12.4 7.3 10 1.8 6.4 4.7 6.6 6.7
8 0 14.4 2.7 6.9 6.6 6.9 2 9.3 7.8 3.3 6.2 6.3
7.5 14.4 0 17.1 15.8 7.8 12.9 16.4 9.3 13.8 12.2 14.1 14.2
10.7 2.7 17.1 0 8.1 9.3 4.2 0.7 9.7 5.1 6 5.8 5.9
8.3 6.9 15.8 8.1 0 9 3.9 8.8 9.4 4.8 3.6 5.5 5.6
12.4 6.6 7.8 9.3 9 0 5.1 8.6 10.6 6 9.6 6.7 6.8
7.3 6.9 12.9 4.2 3.9 5.1 0 4.9 5.5 0.9 4.5 1.6 1.7
10 2 16.4 0.7 8.8 8.6 4.9 0 10.4 5.8 5.3 6.5 6.6
1.8 9.3 9.3 9.7 9.4 10.6 5.5 10.4 0 4.6 6 4.8 4.9
6.4 7.8 13.8 5.1 4.8 6 0.9 5.8 4.6 0 5.4 2.5 2.6
4.7 3.3 12.2 6 3.6 9.6 4.5 5.3 6 5.4 0 2.9 3
6.6 6.2 14.1 5.8 5.5 6.7 1.6 6.5 4.8 2.5 2.9 0 0.1
6.7 6.3 14.2 5.9 5.6 6.8 1.7 6.6 4.9 2.6 3 0.1 0