# Program to check whether odd length cycle is in a graph 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 an undirected graph we have to check whether we can find an odd length cycle inside it or not.

So, if the input is like adj_list = [[1, 2], [0, 3, 4], [0, 3, 4], [1, 2, 4], [1, 2, 3]] then the output will be True as there are odd length cycles like [0, 1, 3, 4, 2], [1, 3, 4], [2, 3, 4].

To solve this, we will follow these steps −

• Define a function dfs() . This will take node, i
• if node is in path, then
• return true when (i - path[node]) is odd
• if node is visited, then
• return False
• mark node as visited
• path[node] := i
• for each c in arr[node], do
• if dfs(c, i + 1) is true, then
• return True
• del path[node]
• return False
• From the main method do the following −
• visited := a new set, path :=a new map
• for i in range 0 to size of arr, do
• if dfs(i, 0) is true, then
• return True
• return False

## Example (Python)

Let us see the following implementation to get better understanding −

Live Demo

class Solution:
def solve(self, arr):
def dfs(node, i):
if node in path:
return (i - path[node]) % 2 == 1
if node in visited:
return False
path[node] = i
for c in arr[node]:
if dfs(c, i + 1):
return True
del path[node]
return False
visited, path = set(), {}
for i in range(len(arr)):
if dfs(i, 0):
return True
return False
ob = Solution()
adj_list = [[1, 2], [0, 3, 4], [0, 3, 4], [1, 2, 4], [1, 2, 3]]
print(ob.solve(adj_list))

## Input

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

## Output

True