algorithm - 如何通过添加最小边数来增加图中最小切割的大小

标签 algorithm graph graph-theory graph-algorithm

问题:给定一棵树 T = (V,E) 。添加最小数量的边,以便即使从新创建的图中删除一条边,仍然存在从任何顶点到任何其他顶点的路径。

我相信这个问题可以减少到将图的最小切割的大小从当前的最小切割 1 增加到 2。但是这样做的有效算法是什么。

最佳答案

这是算法,可以解决任何无向图的这个问题。经过一些简化后,它可以应用于树(不需要第 1 步)。

  1. 使用 DFS 或 Bridge-finding algorithm by Robert Tarjan 查找图中的所有桥.
  2. 创建一个图(实际上,它是一棵树),其中每个无桥子图都用一个顶点代替。
  3. 将树中的每条链折叠成一条边。
  4. 找到两片叶子之间的路径(如果可能,长度至少为 3)。
  5. 在原图的子图中任意选取两个顶点,对应这条路径的两端,并将它们连接起来。
  6. 将这条路径折叠成一个顶点。
  7. 当树中有多个顶点时,从第 3 步开始重复。

第 4 步保证我们不会在第 6 步之后得到不需要的新叶子,这是优化的关键。

关于algorithm - 如何通过添加最小边数来增加图中最小切割的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12757476/

相关文章:

java - 尝试使用 LinkedList 解决前 K 个频繁出现的元素

c# - 使用 PileExclusion 解决数独难题

java - 比较java中包含相同对象的两个ArrayLists

prolog - 在Prolog中找到图中两个节点之间的最短路径

java - 当你有小段时,如何显示每条可能采取的路径?

C++ 算法在条件为真时推进迭代器

python - 基于顶点名称 Python igraph 执行图的并集

c++ - 如何检测图的边列表表示中的循环?

c - MikroC,绘制线图

c++ - 非递归后序图遍历?