合并无向图中的循环以创建树

时间:2016-02-21 18:42:54

标签: algorithm graph-algorithm

问题:给定带有周期的无向图,合并最小数量的节点以消除周期。

例如,下图的解决方案:

     G      H
    / \    / \
A--B---C--D---E--F
    \ /        \
     I          J

将是

A--BCGI--DEH--F
           \
            J

我对如何通过广度优先搜索并在检测到周期时将节点合并到根来解决这个问题有一个大概的想法,但它看起来有点复杂。我想知道这个问题是否有一个众所周知的算法。

BTW:这不是作业。 :)

1 个答案:

答案 0 :(得分:1)

  1. 使用BFS或DFS创建生成树
  2. 对于不在树中的每个边缘,将边缘的两个节点和路径上的所有节点合并到最近的共同祖先。
  3. 这听起来很像你已经想到的:)。但是,如果您使用union-find数据结构来跟踪合并而不是实际修改图形,那么它会更容易。见http://www.algorithmist.com/index.php/Union_Find