找到图表的直径

时间:2014-07-27 13:23:20

标签: matlab graph

在MATLAB中,我随机均匀地将点放入方形[0,1] X [0,1]中。如果两点之间的距离小于0.25,我会在两点之间放置一条边。执行此操作的代码(并在下面绘制结果图)。

num_Rx = 50
Rx_positions = rand(num_Rx,2);

%Generate edges between pairs of within norm of 0.25.
adj_matrix = zeros(num_Rx, num_Rx);
for i=1:num_Rx
    for j=i+1:num_Rx
        dist = norm(Rx_positions(i,:) - Rx_positions(j,:));
        if dist < 0.25;
            adj_matrix(i,j) = 1;
        end
    end
end

figure
gplot(adj_matrix, Rx_positions)

即。这是一个无向图,所有边权重等于1.

要找到我想要调用graphallshortestpaths()(http://www.mathworks.co.uk/help/bioinfo/ref/graphallshortestpaths.html)的直径,并获取返回的最大值(直径是最长的最短路径)。

但是,我在调用此函数时遇到了困难 - 我无法从邻接矩阵和/或节点位置列表中找出如何调用示例的方法。具体来说,我不了解任何示例,给出的matlab代码如何与所呈现的数据相对应。

我将如何做到这一点。

1 个答案:

答案 0 :(得分:1)

看来你所缺少的就是将邻接矩阵转换为稀疏矩阵。这应该会给你你想要的东西:

adj_sparse = sparse(adj_matrix);
distances = graphallshortestpaths(adj_sparse);

% if you don't care which nodes produce the
% longest shortest path, omit long_ind & long_sub
[diameter, long_ind] = max(distances(:));
long_sub = ind2sub(size(distances), long_ind);