Мне нужно составить расписание спортивного мероприятия.
Есть 30 команд. Каждая команда должна сыграть 8 матчей. Это означает, что каждая команда не может снова конкурировать со всеми другими командами, но мне нужно избегать того, чтобы две команды неоднократно соревновались друг с другом.
Моя идея состояла в том, чтобы сгенерировать все возможные совпадения (для 30 команд: (30*29)/2 = 435 matches
) и выбрать из этого списка 120 совпадений (8 совпадений для каждой команды: 8 * 30 / 2 = 120 matches
).
Вот где мне тяжело: как я могу выбрать эти 120 матчей? Я попробовал несколько простых решений (возьмите первое совпадение списка, затем последнее и т.д.), Но они, похоже, не работают с 30 командами. Я также попытался создать всю возможную комбинацию совпадений и найти, какой из них работает, но с 30 командами, это слишком большое время вычисления.
Есть ли существующий алгоритм, который я мог бы реализовать?
UPDATE
Что мне нужно для создания - это простой график, без исключения. Каждая команда играет 8 матчей, и все. В конце дня не будет ни одного победителя.
У каждой команды будет свой график, и этот график не изменится, если они выиграют или проиграют. Планирование выполняется на весь день и является неизменным.
ОБНОВЛЕНИЕ 2
Сначала я не хотел ставить слишком много ограничений на мой вопрос, но кажется, что без каких-либо ограничений (за исключением того, что каждая команда не конкурирует не раз друг с другом), это просто вопрос случайного выбора 8 для каждой команды.
Итак, вот еще несколько деталей:
Во время этого спортивного мероприятия есть 6 различных видов спорта (футбол, гандбол, баскетбол и т.д.). Это означает, что есть 6 одновременных матчей. Новый раунд запускается каждые 15 минут.
Каждая команда должна будет сыграть 8 матчей, и каждый вид спорта хотя бы один раз.
Эти 6 видов спорта проходят в трех разных местах. Это означает, что в течение дня каждая команда должна будет перемещаться из одного места в другое. Эти шаги должны быть как можно более сокращены.
Команда не может сыграть два матча подряд.