将图形转换为二分图

时间:2013-08-29 07:37:04

标签: algorithm graph-algorithm

我正在阅读BFS算法的应用。我读过的一个应用是检查天气给图是否是二分图。现在我想知道,是否有任何算法将图转换为二分图/图。

例如,我们给出了一组边

  

E = {(4,1),(1,2),(2,3),(7,2),(1,5),(8,4),(5,8),(8) ,9)}

和顶点集

  

V = {1,2,3,4,5,6,7,8}

我们必须创建二分集/图。

预期输出为: -

  

s1 = {1,4,8,1,7,3}    s2 = {2,5,6,9}

2 个答案:

答案 0 :(得分:1)

检查图表是否为二分的一般BFS算法是:

  1. 从顶点v_0开始,并将其标记为s1。
  2. 将所有v_0的邻居标记为s2,并将其排队。
  3. 将所有邻居的邻居标记为s1,并将其排队
  4. 如果在任何时候,您将s2标记为已标记为s1的顶点,反之亦然,则该图形不是二分图。相反,如果您最终得到一个空队列,那么您就完成了,并且您拥有了分区。

    修改

    如果你想知道的是,你是如何建立一个普通的二分图,你应该首先添加一个度量来比较两个不同的解决方案:否则,删除所有边并随机分配顶点到两个组,将始终从任何给定的组生成(平凡的)二分图。

答案 1 :(得分:1)

edge bipartization 问题,即删除最小边数以使图形二分,是NP难的。 Here是关于如何尽可能有效地解决问题的讨论的幻灯片。