# Warm Up: Bipartite Graph The basic idea of this algorithm is to do a DFS of the graph, coloring nodes blue or yellow as we go along. We alternate coloring blue and yellow and if we ever see a neighbor the same color as a node, we return false. If we color the graph to completion, it is a bipartite graph. ### Python Solution ```python def isBipartite(graph): color = {} for i in range(len(graph)): if i not in color: color[i] = 0 if not dfs(i, graph, color): return False return True def dfs(pos, graph, color): for i in graph[pos]: if i in color: if color[i] == color[pos]: return False else: color[i] = 1 - color[pos] if not dfs(i, graph, color): return False return True ``` ### Java Solution ```java class Solution { public boolean isBipartite(int[][] graph) { int n = graph.length; int[] colors = new int[n]; Arrays.fill(colors, -1); //This graph might be a disconnected graph. //So check each unvisited node. for (int i = 0; i < n; i++) { if (colors[i] == -1 && !validColor(graph, colors, 0, i)) { return false; } } return true; } public boolean validColor(int[][] graph, int[] colors, int color, int node) { if (colors[node] != -1) { return colors[node] == color; } colors[node] = color; for (int next : graph[node]) { if (!validColor(graph, colors, 1 - color, next)) { return false; } } return true; } } ``` ###### tags: `Week 5-Graphs`