如何制定循环赛赛程?
How do I make a round robin match schedule?
我正在构建一个采用循环赛风格比赛顺序的锦标赛时间表。我设置了一个算法来构建匹配,但是匹配顺序不是我想要的。我正在努力开发一种算法,该算法将按照我想要的顺序构建匹配项。请参阅下面的 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
}
}
有时提出问题有助于找出答案。事实证明,我当前的算法正在创建我想要的东西,只是顺序相反。我所做的修复是在第一个 for 循环中创建一个名为 actualRound:
的新变量
int actualRound = rounds - round; // 这将反转回合顺序
我正在构建一个采用循环赛风格比赛顺序的锦标赛时间表。我设置了一个算法来构建匹配,但是匹配顺序不是我想要的。我正在努力开发一种算法,该算法将按照我想要的顺序构建匹配项。请参阅下面的 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
}
}
有时提出问题有助于找出答案。事实证明,我当前的算法正在创建我想要的东西,只是顺序相反。我所做的修复是在第一个 for 循环中创建一个名为 actualRound:
的新变量int actualRound = rounds - round; // 这将反转回合顺序