# Program to check whether given graph is bipartite or not in Python

PythonServer Side ProgrammingProgramming

#### Beyond Basic Programming - Intermediate Python

Most Popular

36 Lectures 3 hours

#### Practical Machine Learning using Python

Best Seller

91 Lectures 23.5 hours

#### Practical Data Science using Python

22 Lectures 6 hours

Suppose we have one undirected graph, we have to check whether the graph is bipartite or not. As we know a graph is bipartite when we can split the nodes of the graph into two sets A and B such that every edge {u,v} in the graph has one node u in A and another node v in B.

So, if the input is like Then the output will be True, [0,4] are in set A and [1,2,3] are in set B, and all edges are from A to B or B to A, not A to A or B to B.

To solve this, we will follow these steps−

• Define a function dfs() . This will take source

• for each vertex in graph[source], do

• if color[vertex] is not same as -1, then

• if color[vertex] is same as color[source], then

• result := False

• return

• go for the next iteration

• color[vertex] := 1 - color[source]

• dfs(vertex)

• From the main method, do the following−

• n := size of arr

• graph := empty adjacency list for vertices 0 to n-1

• for i in range 0 to n, do

• for each j in arr[i], do

• insert i into graph[j]

• insert j into graph[i]

• color := a list of size n and fill with -1

• result := a list with one True value

• for i in range 0 to n, do

• if color[i] is same as -1, then

• dfs(i)

• return result

Let us see the following implementation to get better understanding −

## Example

Live Demo

from collections import defaultdict
class Solution:
def solve(self, arr):
n = len(arr)
graph = [set() for i in range(n)]
for i in range(n):
for j in arr[i]:
color = [-1] * n
result = [True]
def dfs(source):
for child in graph[source]:
if color[child] != -1:
if color[child] == color[source]:
result = False
return
continue
color[child] = 1 - color[source]
dfs(child)
for i in range(n):
if color[i] == -1:
dfs(i)
return result
ob = Solution()
graph = [[1,2,3],,[0,4],[0,4],[2,3]]
print(ob.solve(graph))

## Input

graph = [[1,2,3],,[0,4],[0,4],[2,3]]

## Output

True