Um gráfico bipartido é um gráfico cujos vértices podem ser divididos em dois conjuntos disjuntos, de modo que nenhuma aresta conecta dois vértices no mesmo conjunto. Um gráfico é bipartido se e somente se for de duas cores.
Desafio
Sua tarefa é, dada a matriz de adjacência de um gráfico simples não direcionado, determinar se é um gráfico bipartido. Ou seja, se uma aresta conecta os vértices iej, as entradas (i, j) e (j, i) da matriz são 1.
Como o gráfico não é direcionado e é simples, sua matriz de adjacência é simétrica e contém apenas 0 e 1.
Específicos
Você deve usar uma matriz N por N como entrada (de qualquer forma, por exemplo, lista de listas, lista de cadeias, int**
tamanho e tipo C , matriz achatada, entrada bruta, etc.).
A função / programa deve retornar / gerar um valor verdadeiro se o gráfico for bipartido e, caso contrário, falsificar.
Casos de teste
['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
Pontuação
Os componentes internos que calculam a resposta diretamente são banidos.
Isso é código-golfe , então o programa mais curto (em bytes) até o final deste mês vence!
-1
por falsidade e qualquer número inteiro não negativo para verdade?
0
-> Falsy, >0
-> Truthy é geralmente permitido pelas regras padrão de truthy / falsy. -1
e ≥ 0
não é tão comum, é por isso que perguntei.