繁体   English   中英

邻接矩阵表示的图是否至少有一棵生成树?

[英]Has graph represented by adjacency matrix at least one spanning tree?

我从两天开始就在学习数学和算法,但我没有更多的想法。 我有邻接矩阵,我有 laplasjan 矩阵。 我想检查这个图是否一致或它是否有生成树。

我正在使用基尔霍夫定理,它对我有用,但它太慢了(10x10 矩阵超过秒)。 我可以修改基尔霍夫定理来检查我的矩阵生成树(不是多少)吗?

我正在尝试学习新东西,所以我不想使用 DFS,我真的想使用邻接矩阵。

这是一种找出图是否至少有一个生成树的算法。

  • 我们将生成树表示为一个数组“par”,其中每个节点都指向树中的父节点。
  • 'par' 初始化为所有节点都将自己作为父节点。
  • 我们有一个函数find_root ,它遵循一连串“par”指针,直到它到达par[node] == node
  • 我们遍历所有链接; 在一个简单的邻接矩阵中,这将是: for i in nodes: for j in nodes: if i!=j: if adjacent[i][j] thenfor i in nodes: for j in nodes: if i!=j: if adjacent[i][j] then
    • k = find_root(i)
    • `l = find_root(j)
    • par[k] = l // 这将 i 的树作为 j 树中 j 的兄弟
    • 最后,我们检查每个节点是否具有相同的根

这样,就构建了一棵或多棵树。 这些树可用于将节点聚集成连接的组。

对于基本算法,一个重要的加速是不仅设置par[k] = l还设置par[i] = lpar[j] = l 下次会更早找到根。 如果图没有方向性,则只需要处理adjacent[i][j]adjacent[j][i]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM