【问题标题】:Distinguish Graph from Tree using Adjacency Matrix使用邻接矩阵区分图和树
【发布时间】:2020-07-02 00:18:24
【问题描述】:

给定一个邻接矩阵,有没有办法确定图是树还是图(是否有循环)。

例如,给定邻接矩阵:

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

这不是一棵树,因为在顶点 1、顶点 2 和顶点 4 之间存在一个循环。

鉴于邻接矩阵:

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

这是一棵树,因为没有循环。

解决此问题的一种方法是执行 BFS,但我认为图的邻接矩阵和树的邻接矩阵之间可能存在视觉差异。

任何帮助将不胜感激!

【问题讨论】:

  • 这看起来像一个无向图的矩阵。对于无向图,主对角线上的条目总是全为 0,其他条目在主对角线上镜像。考虑到这一点,这两个矩阵可以简化为thisthis(不会丢失任何信息)。考虑到这一点,我推测当矩阵更大时不会有明显的视觉差异,并且连接不是那么简单。
  • 没有明显的视觉特征。选择只有一个 1 的行。那是一片叶子。然后首先搜索广度或深度,维护一组已经访问过的顶点。如果你多次遇到同一个节点,它就不是一棵树。请注意,矩阵可能不代表单个组件。在这种情况下,您需要一个外部循环来搜索下一片叶子。

标签: algorithm graph tree graph-theory traversal


【解决方案1】:

您可以使用具有 N 个节点的树恰好具有 N-1 条边这一事实。表示树的任何邻接矩阵将恰好有 2(N-1) 个 1,因为每个边在矩阵中设置两个位(对角线上没有 1,因为树没有自边)。此外,由于必须连接树,因此每行和每列必须至少有一个 1。如果允许您假设对角线对称(即它是一个有效的邻接矩阵),那么每行至少检查一个 1 就足够了。

但是,这些只是初步检查,我认为没有 BFS 或类似的东西,没有简单的方法来实际显示连接。

【讨论】:

    猜你喜欢
    • 2018-06-07
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多