Menu
CoddyTech

Is Graph Bipartite

Граф содержит n узлов с метками от 0 до n-1. Каждая пара [a, b] в edges — это неориентированное ребро между узлом a и узлом b. Граф может состоять из нескольких отдельных частей, а некоторые узлы могут вообще не иметь рёбер.

Граф является двудольным, если его узлы можно разделить на две группы так, чтобы каждое ребро соединяло узел из одной группы с узлом из другой. Верните true, если граф двудольный, и false в противном случае.

Функция

isBipartite(n: integer, edges: integer-2d-array) → boolean
ninteger
количество узлов, пронумерованных от 0 до n-1
edgesinteger-2d-array
неориентированные рёбра, каждое — пара [a, b]
Возвращаетboolean
true, если узлы можно разделить на две группы так, чтобы каждое ребро соединяло узлы из разных групп, иначе false

Ограничения

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [a, b] при условии, что 0 ≤ a, b ≤ n-1 и a ≠ b
  • Ни одно ребро не встречается дважды ни в одном направлении.

Примеры

Ввод
n = 4edges = [[0, 1], [1, 2], [2, 3], [3, 0]]
Вывод
true
Пояснение
Поместите узлы 0 и 2 в одну группу, а узлы 1 и 3 — в другую. Каждое из четырёх рёбер соединяет две группы.
challenge icon

Дополнительный вопрос

Если граф не является двудольным, можете ли вы вернуть один цикл нечётной длины в качестве доказательства, перечислив его узлы по порядку?

Сбросить код
def isBipartite(n, edges):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргументы

n = 4
edges = [[0, 1], [1, 2], [2, 3], [3, 0]]

Ожидаемый вывод

true