Эти проблемные запахи как должны быть ответом в теории графов, но она точно не соответствует ни одной из проблем теории графов, которые я знаю. (Отметьте: это - на самом деле реальная проблема, беллетризованная для более легкого чтения),
Предположите, что у меня есть четная группа Шахматистов в моем доме. У меня есть много таблиц и шахмат для всех для проигрывания, но я должен создать "Соединение", (не уверенный, если существует термин теории графов для него), или список матчей, таким образом, что все играют кого-то. Шахматисты все хотели бы играть кого-то, кого они никогда не играли прежде.
Если у меня есть список от каждого игрока того, кого они играли, я могу легко создать график, показывающий предыдущие матчи. Например, скажите, что A играл B и C, и C играл D:
A----B
|
|
C----D
Я знаю, что могу подойти B/C и A/D для создания соединения.
Но если график предыдущих матчей похож на это:
A----B
\ |
\ |
C D
Затем я не смогу создать соединение. B может только играть C, который сделал бы A и D (кто уже играл), играют друг друга.
Так, как я могу знать (с помощью некоторого метода кроме грубой силы), могу ли я создать соединение? Это не дерево или цикл, который я ищу, но являюсь там некоторым другим свойством графика, на которое я могу протестировать?
Похоже на классическую проблему соответствия: en.wikipedia.org/wiki/Matching_(graph_theory). Вероятно, вы ищете идеальное соответствие.
Смотрите также: http://en.wikipedia.org/wiki/Edmonds%27s_matching_algorithm
Примечание: чтобы использовать алгоритм совпадения, вам нужно использовать Дополнение графа, который вы описываете в вопросе.
Если бы вы изобразили каждого игрока на своем графике дважды, один раз окрашенным в красный цвет и один раз в зеленый (скажем, но избегая черного и белого, чтобы избежать путаницы с шахматными фигурами), это могло бы превратиться в проблему на двудольном графе, для которого существует куча ресурсов.