Menu
CoddyTech

Is Graph Bipartite

MoyenGraphesFilepython iconjava iconcpp iconc iconjs icon+10

Un graphe possède n nœuds, étiquetés de 0 à n-1. Chaque paire [a, b] dans edges représente une arête non orientée entre le nœud a et le nœud b. Le graphe peut être constitué de plusieurs parties distinctes, et certains nœuds peuvent n'avoir aucune arête.

Un graphe est biparti lorsqu'il est possible de répartir ses nœuds en deux groupes de sorte que chaque arête relie un nœud d'un groupe à un nœud de l'autre. Renvoyez true si le graphe est biparti et false dans le cas contraire.

Fonction

isBipartite(n: integer, edges: integer-2d-array) → boolean
ninteger
le nombre de nœuds, numérotés de 0 à n-1
edgesinteger-2d-array
les arêtes non orientées, chacune une paire [a, b]
Renvoieboolean
vrai si les nœuds peuvent être répartis en deux groupes avec chaque arête entre les groupes, faux sinon

Contraintes

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [a, b] avec 0 ≤ a, b ≤ n-1 et a ≠ b
  • Aucune arête n'apparaît deux fois, dans l'un ou l'autre sens.

Exemples

Entrée
n = 4edges = [[0, 1], [1, 2], [2, 3], [3, 0]]
Sortie
true
Explication
Placez les nœuds 0 et 2 dans un groupe et les nœuds 1 et 3 dans l’autre. Chacune des quatre arêtes relie les deux groupes.
challenge icon

Pour aller plus loin

Lorsque le graphe n’est pas biparti, peux-tu renvoyer un cycle de longueur impaire comme preuve, en énumérant ses nœuds dans l’ordre ?

Réinitialiser le code
def isBipartite(n, edges):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

true