Menu
CoddyTech

Is Graph Bipartite

MedioGrafiCodapython iconjava iconcpp iconc iconjs icon+10

Un grafo ha n nodi, etichettati da 0 a n-1. Ogni coppia [a, b] in edges rappresenta un arco non orientato tra il nodo a e il nodo b. Il grafo può essere suddiviso in diverse parti separate e alcuni nodi potrebbero non avere alcun arco.

Un grafo è bipartito quando puoi dividere i suoi nodi in due gruppi in modo che ogni arco colleghi un nodo di un gruppo a un nodo dell'altro. Restituisci true se il grafo è bipartito e false altrimenti.

Funzione

isBipartite(n: integer, edges: integer-2d-array) → boolean
ninteger
il numero di nodi, numerati da 0 a n-1
edgesinteger-2d-array
gli archi non orientati, ciascuno una coppia [a, b]
Restituisceboolean
vero se i nodi possono essere suddivisi in due gruppi con ogni arco tra i gruppi, falso altrimenti

Vincoli

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [a, b] con 0 ≤ a, b ≤ n-1 e a ≠ b
  • Nessun arco compare due volte, in nessuna delle due direzioni.

Esempi

Input
n = 4edges = [[0, 1], [1, 2], [2, 3], [3, 0]]
Output
true
Spiegazione
Metti i nodi 0 e 2 in un gruppo e i nodi 1 e 3 nell’altro. Ognuno dei quattro archi collega i due gruppi.
challenge icon

Per approfondire

Quando il grafo non è bipartito, riesci a restituire un ciclo di lunghezza dispari come prova, elencandone i nodi in ordine?

Ripristina il codice
def isBipartite(n, edges):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomenti

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

Output atteso

true