Un graphe bipartite est un graphe dont les sommets peuvent être divisés en deux ensembles disjoints, de sorte qu'aucune arête ne relie deux sommets du même ensemble. Un graphique est bipartite si et seulement s'il est bicolore.
Défi
Votre tâche consiste à, étant donné la matrice d'adjacence d'un graphe simple non orienté, déterminer s'il s'agit d'un graphe biparti. Autrement dit, si une arête relie les sommets i et j, les entrées (i, j) et (j, i) de la matrice sont égales à 1.
Le graphe étant non orienté et simple, sa matrice d'adjacence est symétrique et ne contient que 0 et 1.
Détails
Vous devez prendre une matrice N par N en entrée (sous n'importe quelle forme, par exemple liste de listes, liste de chaînes, de type C int**
et taille, tableau aplati, entrée brute, etc.).
La fonction / le programme doit retourner / afficher une valeur véridique si le graphique est bipartite, et faux sinon.
Cas de 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
Notation
Les buildins qui calculent directement la réponse sont interdits.
Il s'agit de code-golf , donc le programme le plus court (en octets) d'ici la fin de ce mois gagne!
-1
pour fausse et tout entier non négatif pour vérité?
0
-> Falsy, >0
-> Truthy est généralement autorisé par les règles standard de vérité / fausse. -1
et ce ≥ 0
n'est pas si courant, c'est pourquoi j'ai demandé.