生成树,正好是k色边缘

时间:2010-12-06 05:08:42

标签: algorithm graph spanning-tree

我有一个连接的无向图,边的每个都是黑色或白色,还有一个整数k。 我正在尝试编写一个算法来判断生成树是否存在k个黑色边缘(不一定要找到实际的树)。

我使用Kruskal的算法来查找生成树中最小和最大可能的黑边数。如果k超出此范围,则不存在具有k个边的生成树。

但是我无法理解是否必须为该范围内的每个k生成一棵生成树。我的直觉是肯定的,它对我尝试过的每个例子都有效,但我无法弄清楚如何证明它。

有什么建议吗?提前谢谢。

2 个答案:

答案 0 :(得分:6)

设G_min =具有最小黑边数的生成树。

设G_max =具有最大黑边数的生成树。

设k_min = G_min

中的黑边#

设k_max = G_max

中的黑边的数量

证据如下。设定G = G_min。对G_max中的每个黑色边缘重复:

  1) If the edge is already in G, do nothing.
  2) If the edge is not in G, add it to G and remove another edge
     from the cycle thus induced in G.  Remove one not in G_max.

步骤2始终是可行的,因为每个周期中至少有一个边不在G_max中。

该算法保持G的生成树状态。它每步最多添加一个黑色边缘,因此G演示了一个生成树,其中k_min和k_max之间的所有k都有k个黑色边缘。

答案 1 :(得分:1)

Kruskal会找到你最小的生成树 - 所以为了找到Gmin你需要反过来这样做。 gmin = case所有黑色边缘都给出了wight 1和白色给出了wight 0.算法首先使用所有白色edgedes然后是黑色边缘。这样我们就可以得到gmin。