判断一个给定图是不是二分图. 题目提供一个用二维数组存储的邻接表. 常规的二分图判断,点着色.
注意要将图存入类中,因为dfs需要访问图中的点.
1 class Solution { 2 private int[][] graph; 3 private boolean[] visited; 4 private int[] colors; 5 6 public boolean isBipartite(int[][] graph) { 7 this.graph = graph; 8 int V = graph.length; 9 visited = new boolean[V]; 10 colors = new int[V]; 11 12 for (int v = 0; v < V; v++) 13 if (!visited[v]) 14 if(!dfs(v, 0)) 15 return false; 16 return true; 17 } 18 19 private boolean dfs(int v, int color) { 20 visited[v] = true; 21 colors[v] = color; 22 for (int w : graph[v]) { 23 if (!visited[w]) { 24 if (!dfs(w, 1 - color)) 25 return false; 26 } 27 else if (colors[v] == colors[w]) 28 return false; 29 } 30 return true; 31 } 32 }
原文地址:https://www.cnblogs.com/AntonLiu/p/11288250.html
时间: 2024-11-06 07:29:59