Почему ты не можешь? Ваш вопрос мешает кому-то даже написать программу для вас, поскольку вы даже не упоминаете конкретный язык ...
Идея состоит в том, чтобы начать с помещения случайного узла в очередь FIFO (также здесь ). Цвет это синий. Затем повторите это, пока в очереди еще есть узлы: удалите элемент из очереди. Раскрасьте соседей другим цветом, отличным от извлеченного элемента, и вставьте (поставьте в очередь) каждого соседа в очередь FIFO. Например, если вы удаляете из очереди (извлекаете) элемент (узел), окрашенный в красный цвет, его соседи окрашиваются в синий цвет. Если вы извлекаете синий узел, раскрасьте его соседей красным. Если нет цветовых конфликтов, график является двудольным. Если в итоге вы раскрасите узел двумя разными цветами, это не будет двудольный.
Как сказал @Moron, то, что я описал, будет работать только для связанных графов. Однако вы можете применить один и тот же алгоритм к каждому подключенному компоненту, чтобы он работал на любом графике.