Расписание матчей по теннису

Есть ограниченное количество игроков и ограниченное количество теннисных кортов. В каждом раунде может быть не больше, чем количество матчей. Никто не играет 2 раунда без перерыва. Все играют матч против всех остальных. Составьте расписание, которое займет как можно меньше раундов. (Из-за правила, согласно которому должен быть перерыв между раундами для всех, может быть раунд без матчей.) Выход для 5 игроков и 2 кортов может быть:

 |  1   2   3   4   5
-|------------------- 
2|  1   - 
3|  5   3   - 
4|  7   9   1   - 
5|  3   7   9   5   -

В этом выводе столбцы и строки - это номера игроков, а числа внутри матрицы - это круглые числа, в которых соревнуются эти два игрока.

Проблема состоит в том, чтобы найти алгоритм, который может сделать это для больших экземпляров за приемлемое время. Нас попросили сделать это на Прологе, но (псевдо) код на любом языке был бы полезен.

Моя первая попытка была жадным алгоритмом, но он дает результаты с большим количеством раундов. Затем я предложил итеративный углубленный поиск в глубину, который реализовал мой друг, но он по-прежнему занимал слишком много времени в таких случаях, как 7 игроков.

(Это из старого экзаменационного вопроса. Никто из тех, с кем я говорил, не имел решения.)

Ответы на вопрос(6)

Ваш ответ на вопрос