3

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

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

但是我很难考虑是否必须为该范围内的每个 k 生成一棵生成树。我的直觉说是的,并且它适用于我尝试过的每个示例,但我不知道如何证明它。

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

4

2 回答 2

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 个黑色边。

于 2010-12-06T07:57:33.420 回答
1

Kruskal's 会为您找到最小 wight 生成树 - 因此,为了找到 Gmin,您需要以相反的方式执行此操作。gmin = case 所有黑边都给 wight 1,白色给 wight 0。算法首先使用所有白色边缘然后是黑色边缘的方式。这样我们就会得到gmin。

于 2012-05-18T07:52:09.467 回答