我有一个连接的无向图,边的每个都是黑色或白色,还有一个整数k。 我正在尝试编写一个算法来判断生成树是否存在k个黑色边缘(不一定要找到实际的树)。
我使用Kruskal的算法来查找生成树中最小和最大可能的黑边数。如果k超出此范围,则不存在具有k个边的生成树。
但是我无法理解是否必须为该范围内的每个k生成一棵生成树。我的直觉是肯定的,它对我尝试过的每个例子都有效,但我无法弄清楚如何证明它。
有什么建议吗?提前谢谢。
答案 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。