Двудольный граф представляет собой график, вершины которого можно разделить на два множества не пересекаются, таким образом, что ни одно ребро не соединяет две вершины в одном наборе. Граф является двудольным тогда и только тогда, когда он 2-раскрашен.
Вызов
Ваша задача состоит в том, чтобы, учитывая матрицу смежности неориентированного простого графа, определить, является ли он двудольным графом. То есть, если ребро соединяет вершины i и j, оба элемента (i, j) и (j, i) матрицы равны 1.
Поскольку граф является ненаправленным и простым, его матрица смежности симметрична и содержит только 0 и 1.
конкретика
Вы должны использовать матрицу N-N-N в качестве входных данных (в любой форме, например, список списков, список строк, C-подобный int**
и размер, плоский массив, необработанный ввод и т. Д.).
Функция / программа должна возвращать / выводить истинное значение, если график является двудольным, и ложным в противном случае.
Тестовые случаи
['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
счет
Встроенные функции, которые вычисляют ответ напрямую, запрещены.
Это код-гольф , поэтому выигрывает самая короткая программа (в байтах) к концу этого месяца!
-1
за ложь и любое неотрицательное целое число для правды?
0
-> Falsy, >0
-> Truthy, как правило, допускается стандартными правилами true / falsy. -1
и ≥ 0
это не так часто, поэтому я и спросил.