MATLAB问题——关于“最短路径”

2025-05-05 06:35:25
推荐回答(1个)
回答1:

可以用生物信息工具箱(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