Расписание теннисных матчей

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

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

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

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

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

(Это из старого экзаменационного вопроса. Я ни с кем не говорил) имел какое-либо решение.)

42
задан Handcraftsman 24 March 2013 в 18:04
поделиться