Если я правильно понимаю ваш код, вы хотите вернуть False
, если в любом месте вашего рекурсивного поиска вы найдете совпадающие цвета.Вы хотите вернуть True
, если дойдете до конца поиска, не найдя ничего.
Это не так уж сложно сделать.Просто измените оператор raise
на return False
, проверьте результат рекурсивных вызовов и верните False
, если любой из них вернет результат False
.Затем просто поставьте return True
в конце функции, и все готово:
def is_bipartite(v, visited, colors, counter):
visited[v] = True
colors[v] = counter % 2
for u in v.links:
if u in visited:
if colors[v] == colors[u]:
return False # return instead of raise in this base case
if u not in visited:
visited[u] = False
if not is_bipartite(u, visited, colors, counter + 1): # check the recursion
return False # pass on any False
return True # return True only if you got to the end without returning False above