Планирование расписания игр

Webage

Новичок
Добрый вечер. Возникла задача над решением которой ломаю голову второй день.
Есть список команд, допустим А, Б, В. У нас есть чемпионат по условиям которого, у нас будет 3 тура, так как команды 3 и в каждом туре каждая команда должна сыграть одну игру, а за три тура сыграть со всеми командами. Для наглядности:

0 1 2 3
А 0 Б В
Б А 0 Б
В Б А 0


Итого каждая команда сыграла с противником и пропустила по одной игре, так как сама с собой команда играть не может.
Если команд будет четное количество то пропуска игр не будет, например возьмем 4 команды, А Б В Г, туров как и в первом варианте будет 3.

0 1 2 3
А Б В Г
Б А Г В
В Г А Б
Г В Б А

Такие таблицы можно рассчитать и в ручную, а вот если команд 10 или 30.
Может у кого есть идеи как это можно реализовать в автоматическом режиме учитывая четное и нечетное количество команд.
 

DiMA

php.spb.ru
Команда форума
так это же элементарный перебор строки из алфавита, всех комбинаций, типа брутфорса пароля
или, что тоже самое, последовательная сортировка строки с АБВ до ВБА, как будто алгоритм сортировки пузырьком
 

Webage

Новичок
Как я уже писал выше, данная схема работает когда количество команд четное, а как быть когда оно не четное.
 

WMix

герр M:)ller
Партнер клуба
не понимаю, каждая каманда должна сыграть с каждой другой командой (но не сама с собой). если команд 3 то каждая играет по 2 игры если 4 то по 3 - все очень просто! на самом деле в этой задаче другая задача интересней. подсчет очков и планирование игр по датам / часам с учетом что одна и таже команда не играет параллельно или еще хуже тотже день не играет дважды или не чаще чем 1 раз в два дня.... !
 

MiksIr

miksir@home:~$
Игр 2 или 3, но туров 3 =) В туре может быть несколько игр одновременно, например АБ и СД играют одновременно.
 

MiksIr

miksir@home:~$
Если число участников чётно, то есть N=2K, то записывают в правом столбце сверху вниз номера от 1 до K сверху вниз, а в левом столбце номера от K+1 до N снизу вверх. Участники, номера которых написаны напротив друг друга, встречаются в первом туре. Для составления аналогичных таблиц для последующих туров номер 1 оставляют на месте, а все остальные номера передвигают против часовой стрелки, каждый раз на один шаг. В связи с последней процедурой круговая система проведения соревнований, собственно, и называется круговой. Если число участников нечётно, то добавляют номер ноль, и для получившегося набора номеров, количество которых теперь чётно, выполняют вышеозначенные процедуры. Участник, против номера которого в каком-либо туре стоит число 0, в этом туре свободен, не играет.
https://ru.wikipedia.org/wiki/Круговая_система

Казалось бы... пойти и спросить гугл.
 
Сверху