我正在阅读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}
答案 0 :(得分:1)
检查图表是否为二分的一般BFS算法是:
如果在任何时候,您将s2标记为已标记为s1的顶点,反之亦然,则该图形不是二分图。相反,如果您最终得到一个空队列,那么您就完成了,并且您拥有了分区。
修改强>
如果你想知道的是,你是如何建立一个普通的二分图,你应该首先添加一个度量来比较两个不同的解决方案:否则,删除所有边并随机分配顶点到两个组,将始终从任何给定的组生成(平凡的)二分图。
答案 1 :(得分:1)
edge bipartization 问题,即删除最小边数以使图形二分,是NP难的。 Here是关于如何尽可能有效地解决问题的讨论的幻灯片。