【问题标题】:How to draw 2 merging trees using an adjacency matrix in Matlab如何在 Matlab 中使用邻接矩阵绘制 2 棵合并树
【发布时间】:2020-07-25 21:20:23
【问题描述】:

我有一个邻接矩阵,描述了在中间合并的两棵树。 10 个节点的示例:

对应的邻接矩阵是一个10x10矩阵,其中第一行对应第一个节点(第一棵树的开始,节点#1),最后一行对应第二棵树的根(第二棵树的结束,节点#10)。

这里是一个更大的例子对应的邻接矩阵,有 22 个节点:

0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
1   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
1   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   1   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0
0   1   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0
0   0   1   0   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0
0   0   1   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0
0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0
0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0
0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0
0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0
0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0
0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0
0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0
0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0
0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   1   0   0
0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   1   0   0
0   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0   1   0
0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   0   1   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   1
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   0   1
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0

我正在尝试使用 Matlab 绘制如上图所示的邻接矩阵。 Matlab 作为一些绘制树的工具,例如给出的代码: https://blogs.mathworks.com/cleve/2017/03/20/morse-code-binary-trees-and-graphs/

但是,使用前面的矩阵(我们将其标记为“A”)和以下代码:

G = digraph(A);
Gp = plot(G);

不生成树,而是生成图(不按树排序)。

那么,如何在 Matlab 中使用 'A' 生成树的图片(如上所示)?

请注意,我还有描述树的矩阵,其中子节点之间的度数为 3(或更多)而不是 2。

【问题讨论】:

    标签: matlab graph tree


    【解决方案1】:

    将邻接矩阵的一半归零以建立单向连接。


    默认情况下,MATLAB 会尝试根据您的图形结构自动决定图形的布局。您可以选择几种不同的graph layouts

    您想要的选项是'Layered' 布局;但我用你的例子和it definitely still doesn't look like a tree对其进行了测试。 原因是你的邻接矩阵是对称的,连接是双向的。这让MATLAB在放置节点时感到困惑,它不会认为它是一棵树。

    简单的解决方法是,您可以将邻接矩阵的下三角半部分归零。我为此使用了函数tril

    % Create a lower triangular matrix with the dimension of A,
    idx = tril(ones(size(A)));
    
    % Make it a logical array to select matrix elements with
    idx = logical(idx);
    
    % Select the defined lower triangular part, and set that to zero
    A(idx) = 0;
    
    % Generate-Plot graph as you did
    G = digraph(A);
    plot(G)
    

    Result

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      相关资源
      最近更新 更多