Un grafico bipartito è un grafico i cui vertici possono essere divisi in due insiemi disgiunti, in modo tale che nessun bordo colleghi due vertici nello stesso insieme. Un grafico è bipartito se e solo se è bicolore.
Sfida
Il tuo compito è, data la matrice di adiacenza di un grafico semplice non indirizzato, determinare se si tratta di un grafico bipartito. Cioè, se un bordo collega i vertici i e j, entrambe le voci (i, j) e (j, i) della matrice sono 1.
Poiché il grafico non è diretto e semplice, la sua matrice di adiacenza è simmetrica e contiene solo 0 e 1.
specifiche
Dovresti prendere una matrice N-by-N come input (in qualsiasi forma, ad esempio un elenco di elenchi, un elenco di stringhe, un C-like int**
e dimensioni, un array appiattito, un input non elaborato, ecc.).
La funzione / programma dovrebbe restituire / generare un valore di verità se il grafico è bipartito e falsare diversamente.
Casi test
['00101',
'00010',
'10001',
'01000',
'10100'] : False
['010100',
'100011',
'000100',
'101000',
'010000',
'010000'] : True (divide into {0, 2, 4, 5} and {1, 3})
['00',
'00'] : True
punteggio
I builtin che calcolano direttamente la risposta sono vietati.
Questo è code-golf , quindi vince il programma più breve (in byte) entro la fine di questo mese!
-1
per falsità e qualsiasi numero intero non negativo per verità?
0
-> Falsy, >0
-> La verità è generalmente consentita dalle regole standard di verità / falsità. -1
e ≥ 0
non è così comune, ecco perché l'ho chiesto.