Menu
CoddyTech

Is Graph Bipartite

MedioGrafosColapython iconjava iconcpp iconc iconjs icon+10

Un grafo tiene n nodos, etiquetados del 0 al n-1. Cada par [a, b] en edges es una arista no dirigida entre el nodo a y el nodo b. El grafo puede dividirse en varias partes separadas, y algunos nodos pueden no tener ninguna arista.

Un grafo es bipartito cuando puedes dividir sus nodos en dos grupos, de modo que cada arista conecte un nodo de un grupo con un nodo del otro. Devuelve true si el grafo es bipartito y false en caso contrario.

Función

isBipartite(n: integer, edges: integer-2d-array) → boolean
ninteger
el número de nodos, numerados del 0 al n-1
edgesinteger-2d-array
las aristas no dirigidas, cada una un par [a, b]
Devuelveboolean
verdadero si los nodos se pueden dividir en dos grupos con todas las aristas entre los grupos; falso en caso contrario

Restricciones

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [a, b] con 0 ≤ a, b ≤ n-1 y a ≠ b
  • No aparece ninguna arista dos veces, en ninguna dirección.

Ejemplos

Entrada
n = 4edges = [[0, 1], [1, 2], [2, 3], [3, 0]]
Salida
true
Explicación
Pon los nodos 0 y 2 en un grupo y los nodos 1 y 3 en el otro. Cada una de las cuatro aristas conecta los dos grupos.
challenge icon

Para ir más allá

Cuando el grafo no es bipartito, ¿puedes devolver un ciclo de longitud impar como prueba, indicando sus nodos en orden?

Restablecer código
def isBipartite(n, edges):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumentos

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

Salida Esperada

true