Menu
CoddyTech

Is Graph Bipartite

MédioGrafosFilapython iconjava iconcpp iconc iconjs icon+10

Um grafo tem n nós, rotulados de 0 a n-1. Cada par [a, b] em edges é uma aresta não direcionada entre o nó a e o nó b. O grafo pode se dividir em várias partes separadas, e alguns nós podem não ter nenhuma aresta.

Um grafo é bipartido quando você consegue dividir seus nós em dois grupos de modo que cada aresta conecte um nó de um grupo a um nó do outro. Retorne true se o grafo for bipartido e false caso contrário.

Função

isBipartite(n: integer, edges: integer-2d-array) → boolean
ninteger
o número de nós, numerados de 0 a n-1
edgesinteger-2d-array
as arestas não direcionadas, cada uma sendo um par [a, b]
Retornaboolean
verdadeiro se os nós puderem ser divididos em dois grupos com todas as arestas entre os grupos; caso contrário, falso

Restrições

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [a, b] com 0 ≤ a, b ≤ n-1 e a ≠ b
  • Não há nenhuma aresta que apareça duas vezes, em nenhuma das direções.

Exemplos

Entrada
n = 4edges = [[0, 1], [1, 2], [2, 3], [3, 0]]
Saída
true
Explicação
Coloque os nós 0 e 2 em um grupo e os nós 1 e 3 no outro. Cada uma das quatro arestas conecta os dois grupos.
challenge icon

Para ir além

Quando o grafo não é bipartido, você consegue retornar um ciclo de comprimento ímpar como prova, listando seus nós em ordem?

Redefinir código
def isBipartite(n, edges):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #3

Argumentos

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

Saída Esperada

true