Фон
Спортивный клуб, в котором я участвую, попросил у меня помощи с ИТ-поддержкой для предстоящего соревнования.
Соревнование состоит из команд из которыхточное число не обязательно известно до дня соревнования.Отсюда необходимость в программной помощи.
Все команды встретятся с каждой другой командой в ряде матчей .Таким образом, количество матчей составляет N за 2 (все комбинации по 2), где N - количество команд.
У нас есть неизвестное количество доступных кортов дляиграть матчи дальше.Вероятно, это число будет 1 или, возможно, 2, но я бы хотел общее решение.
Соревнование будет проходить в ходах .На каждом ходу будет сыгран один матч на каждом корте .
Например, если есть два корта и пять команд (A, B, C, D, E) схема поворота может выглядеть следующим образом:
Turn Court 1 Court 2
--------------------------------
1 A vs B C vs D
2 A vs C D vs E
3 A vs D B vs E
4 B vs D C vs E
5 A vs E B vs C
Проблема
Моя задача, таким образом, состоит в том, чтобы найти алгоритм для генерации набора поворотов, который подчиняется следующим простым правилам:
- Все команды должны встречаться со всеми остальными командами ровно один раз во время соревнования.
- Команда не может сыграть два матча в один ход (то есть она не может играть одновременно на корте 1 и 2).)
- Ходы, в которых играет конкретная команда, должны быть распределены по всему соревнованию.
Подробное правило 3
Правила 1 и 2 довольно просты,и у меня уже есть решение для этого.Это правило 3, которое вызывает у меня проблемы.Я попытаюсь показать, что это значит:
Допустим, у меня 5 команд (как указано выше), но только 1 корт.Есть 10 матчей за 10 ходов.Один из возможных вариантов:
Turn Court 1
1 A vs B
2 A vs C
3 A vs D
4 A vs E
5 .
. .
. .
10 .
. В этом случае А играет первые четыре матча, что несправедливо, поскольку у них нет шансов восстановить свою энергию между играми.Это то, чего я хочу избежать.
Идеи?