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