Как мне составить расписание матчей? - PullRequest
0 голосов
/ 22 марта 2020

Я строю расписание турниров с порядком матчей в стиле круговой игры. У меня есть алгоритм для создания совпадений, однако порядок совпадений не тот, который я ищу. Я изо всех сил пытаюсь разработать алгоритм, который будет строить совпадения в моем желаемом порядке. См. Пример ниже с брекетом в 6 команд. Каждая вертикальная линия представляет строку в турнире. Крайний левый номер представляет базовое семя команды и то, с кем они будут играть в каждом раунде.

Примечание: единственное, что действительно важно для меня, это то, что семена 1 и 2 играют в последнем раунде турнира. , И желательно, чтобы 1 на 6, 2 на 5, 3 на 4 происходило в первом туре турнира. Все остальные матчи не так важны. Заранее благодарим за любую помощь, которую вы можете оказать.

1: 6 5 4 3 2

2: 5 4 3 6 1

3: 4 6 2 1 5

4: 3 2 1 5 6

5: 2 1 6 4 3

6: 1 3 5 2 4

Вот мой текущий код:

                int numTeams = teamList.Count;

                int rounds = (numTeams - 1);
                int halfSize = numTeams / 2;
                List<Team> teams = new List<Team>();
                teams.AddRange(teamList); // Copy all the elements.
                teams.RemoveAt(0); // To exclude the first team.

                int teamSize = teams.Count;
                for (int round = 0; round < rounds; round++)
                {
                    int teamIdx = round % teamSize;

                    Team baseTeam1 = teams[teamIdx];
                    Team baseTeam2 = teamList[0];
                    // save each team to a match

                    for (int idx = 1; idx < halfSize; idx++)
                    {
                        int firstTeamIdx = (round + idx) % teamSize;
                        int secondTeamIdx = (round + teamSize - idx) % teamSize;

                        Team subTeam1 = teams[firstTeamIdx];
                        Team subTeam2 = teams[secondTeamIdx];
                        // save each team to a match

                    }

                }

1 Ответ

0 голосов
/ 22 марта 2020

Иногда задание вопроса помогает понять ответ. Как оказалось, мой текущий алгоритм создавал то, что я хотел, просто в обратном порядке. Чтобы исправить это, я создал новую переменную внутри первой для l oop с именем actualRound:

int actualRound = rounds - round; // это обратит порядок округления

...