Существует ограниченное количество игроков и ограниченное количество теннисных кортов. На каждом раунде может быть не больше таких матчей, как есть суды. Никто не играет в 2 раунда без перерыва. Каждый играет матч против всех остальных. Произведите расписание, которое займет как можно меньше раундов. (Из-за правила, что должен быть разрыв между раундами для всех, может быть раунд без матчей.) Результат для 5 игроков и 2 судов может быть:
| 1 2 3 4 5
-|-------------------
2| 1 -
3| 5 3 -
4| 7 9 1 -
5| 3 7 9 5 -
В этом выводе столбцы и строки являются номерами игроков, а числа внутри матрицы - это круглые числа, с которыми конкурируют эти два игрока.
Проблема заключается в том, чтобы найти алгоритм, который может сделать это для больших экземпляров в допустимое время. Нам просили сделать это в Prolog, но (псевдо) код на любом языке был бы полезен.
Моя первая попытка была жадным алгоритмом, но это дает результаты со слишком большим количеством раундов. Затем я предложил итеративный углубленный поиск глубины глубины, который был реализован моим другом, но это заняло слишком много времени на экземплярах размером до 7 игроков.
(Это из старого экзаменационного вопроса. Никто, с кем я разговаривал, не имел никакого решения.)