二分图/二部图检测(动图&代码实现)
定义 二分图(中文翻译问题,有时也称作二部图),是图论中的一种特殊模型。 如果图可以分为两部分: 绿色和蓝色,并且每一条连线都连接着一个绿色顶点和一个蓝色定点,则称这个图为一个二分图.下图就是一个二分图. 二分图检测 示例图,如下: 肉眼很难区分出两部分,需要采用一定的算法才可区分,下面就介绍检测的方法--染色. 染色 首先,选择一个节点,置为蓝色(绿色也可),再将与之连线的节点置为对立的颜色-绿色,按深度优先(广度优先也可)的逻辑,将节点依次置为对立色,如果最终结果为:每条边都连接这一个蓝色和一个绿色节点,则二分图检测成功. 代码实现(java) import java.util.ArrayList; public class BipartitionDetection { /** * 图的类 * public class Graph { * private int V; // 顶点 * private TreeSet<Integer>[] adj; // 每个顶点相连的顶点树数组 * } */ private Graph G; /** * 已访问的顶点数组 */ private boolean[] visited; /** * 0->蓝色, 1->绿色 */ private int[] colors; /** * 是否为二分图 */ private boolean