[Из песочницы] Жеребьевка — нажатием кнопки
Для решения одной, как я считаю, амбициозной задачи, связанной с проведением футбольного турнира, мне необходимо было использовать процедуру формирования соревновательных пар, т.е. провести жеребьевку. Но произвести ее нужно не обычным «человеческим» способом, а автоматизировано. Поискав готовые решения аналогичной задачи, нашел только формирование корзин участников при наличии сеянных и несеянных команд (Пример), что меня не устроило и не решало поставленной задачи. В итоге проанализировав процедуру обычной однокруговой жеребьевки, сформировал следующий алгоритм и условия:Входные условия жеребьевки:
- Имеется N команд – участников.
- Каждая команда за первый круг сыграет N-1 матчей.
- Команда N ни в каком из туров не может сыграть сама с собой.
- В каждом туре соперники образуют уникальные, не повторяющиеся ранее пары.
- Если в каком-то из туров команда N играет с командой M, то соответственно в этом же туре команда M играет с командой N.
Сопоставив процесс формирования случайных пар соперников процедуре заполнения двумерного массива DrawTable[i, j] случайными величинами, получил следующее (язык C#, .Net 4.0):
Читать дальше →