Menu
CoddyTech

Is Graph Bipartite

ŚrednieGrafyKolejkapython iconjava iconcpp iconc iconjs icon+10

Graf ma n węzłów oznaczonych od 0 do n-1. Każda para [a, b] w edges jest nieskierowaną krawędzią między węzłem a a węzłem b. Graf może składać się z kilku oddzielnych części, a niektóre węzły mogą nie mieć żadnej krawędzi.

Graf jest dwudzielny, gdy można podzielić jego węzły na dwie grupy tak, aby każda krawędź łączyła węzeł z jednej grupy z węzłem z drugiej. Zwróć true, jeśli graf jest dwudzielny, a w przeciwnym razie false.

Funkcja

isBipartite(n: integer, edges: integer-2d-array) → boolean
ninteger
liczba węzłów, ponumerowanych od 0 do n-1
edgesinteger-2d-array
nieskierowane krawędzie, każda w postaci pary [a, b]
Zwracaboolean
true, jeśli węzły można podzielić na dwie grupy tak, aby każda krawędź łączyła węzły z różnych grup; w przeciwnym razie false

Ograniczenia

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [a, b], gdzie 0 ≤ a, b ≤ n-1 oraz a ≠ b
  • Żadna krawędź nie występuje dwukrotnie, w żadnym kierunku.

Przykłady

Wejście
n = 4edges = [[0, 1], [1, 2], [2, 3], [3, 0]]
Wyjście
true
Wyjaśnienie
Umieść węzły 0 i 2 w jednej grupie, a węzły 1 i 3 w drugiej. Każda z czterech krawędzi łączy obie grupy.
challenge icon

Pytanie dodatkowe

Jeśli graf nie jest dwudzielny, czy możesz zwrócić jeden cykl o nieparzystej długości jako dowód, podając jego węzły w kolejności?

Zresetuj kod
def isBipartite(n, edges):
    # Napisz kod tutaj

Test #1

Test #2

Test #3

Argumenty

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

Oczekiwany wynik

true