Эта ссылка была очень полезна для меня в последний раз, когда я писал алгоритм циклического планирования. Он включает в себя реализацию алгоритма C первого соответствия для циклических пар.
http://www.devenezia.com/downloads/round-robin/
В дополнение к алгоритму у него есть несколько полезных ссылок на другие аспекты планирования турниров (балансирование домашних и выездных игр, а также ротация команд по полям / кортам).
Обратите внимание, что вы не обязательно хотите "случайный" порядок для пар во всех случаях. Например, если вы запланировали круговую футбольную лигу на 8 игр, в которых было только 6 команд, то каждая команда должна будет сыграть две другие команды дважды. Если вы хотите, чтобы сезон был более приятным для всех, вам нужно начать беспокоиться о посеве, чтобы у вас не было двух лучших команд, которые разбили две слабейшие команды в последних двух играх. Вам лучше организовать дополнительные игры в паре с командами с одинаковой силой / затравкой.