二分图
二分图
只使用两种颜色,将图的顶点染色,如果能保证每个相连的顶点颜色不同的话,这个图则是二分图。
二分图的判断
import java.util.Scanner;
public class Main {
static Scanner in = new Scanner(System.in);
static int V = 3;//顶点数
static int[] colors;//顶点颜色,充当记忆化数组,减少递归
static int map[][];//邻接表
public static void main(String[] args) {
map = new int[V][V];
colors = new int[V];
//用例用的第一个图的
map = new int[][]{{0, 1, 1}, {1, 0, 1}, {1, 1, 0}};
solve();
}
public static void solve() {
for (int i = 0; i < V; i++) {
if (colors[i] == 0) {
if (!dfs(i, 1)) {
System.out.println("NO");
return;
}
}
}
System.out.println("YES");
}
private static boolean dfs(int v, int c) {
colors[v] = c;
for (int i = 0; i < V; i++) {
//顶点不相连
if (map[v][i] == 0) continue;
//两定点同色
if (colors[i] == c) return false;
//相邻顶点未染色,递归将其染另一个色
if (colors[i] == 0 && !dfs(i, -c)) {
return false;
}
}
return true;
}
}
Loading...