diff --git a/graphs/possible_bipartition.py b/graphs/possible_bipartition.py index ca55677..08e3ae9 100644 --- a/graphs/possible_bipartition.py +++ b/graphs/possible_bipartition.py @@ -5,8 +5,37 @@ def possible_bipartition(dislikes): """ Will return True or False if the given graph can be bipartitioned without neighboring nodes put into the same partition. - Time Complexity: ? - Space Complexity: ? + Time Complexity: O(n2) + Space Complexity: O(n) """ - pass + if not dislikes: + return True + + queue = deque() + queue.append(0) + + check = len(dislikes) * [False] + whites = set() + blacks = set() + + while queue: + x = queue.popleft() + for i in dislikes[x]: + if not check[i]: + queue.append(i) + + if x not in whites: + if i in blacks: + return False + whites.add(i) + else: + if i in whites: + return False + blacks.add(i) + + check[x] = True + if not dislikes[x]: + queue.append(x + 1) + + return True