Algorithm 比赛时间表算法,每个队打特定的比赛次数

Algorithm 比赛时间表算法,每个队打特定的比赛次数,algorithm,match,Algorithm,Match,我有特定数量的团队。我希望每支球队在4个特定的时间与4个不同的对手进行4场比赛 这种复杂的情况是因为没有一支球队可以同时打两场不同的比赛。 例如,如果一队是这样打球的 第1队对第2队,第1队对第3队,第1队对第4队,第1队对第5队 然后第二组已经有了第一个时间段,所以第二组可以这样玩 (第2组对第1组)、第2组对第3组、第2组对第4组、第2组对第5组 但是问题出现了,第三队将在第二个时间段与第一队和第二队比赛,这是不可能做到的 我不知道这个算法可以被称为什么,但我正在寻找实现这个

我有特定数量的团队。我希望每支球队在4个特定的时间与4个不同的对手进行4场比赛

这种复杂的情况是因为没有一支球队可以同时打两场不同的比赛。 例如,如果一队是这样打球的

第1队对第2队,第1队对第3队,第1队对第4队,第1队对第5队

然后第二组已经有了第一个时间段,所以第二组可以这样玩

(第2组对第1组)、第2组对第3组、第2组对第4组、第2组对第5组

但是问题出现了,第三队将在第二个时间段与第一队和第二队比赛,这是不可能做到的

我不知道这个算法可以被称为什么,但我正在寻找实现这个算法的算法

我做了一个搜索来寻找循环赛和其他类似比赛的匹配算法以及婚姻问题,但我认为我的问题是不同的。如果我错了,请纠正我


非常感谢您的帮助。

我得出结论,如果团队数量是奇数,则没有解决方案。让N是团队的数量。我们总共需要4/2场比赛,每队4场,但每场比赛对两队有效。要在四个时隙中进行
N*2
匹配,我们必须平均每个时隙的
N/2
匹配。我们一次最多可以进行
floor(N/2)
匹配。如果N为奇数,
楼层(N/2)


如果存在只适用于偶数N的解决方案,它会有用吗?

我得出结论,如果团队数量是奇数,就没有解决方案。让N是团队的数量。我们总共需要4/2场比赛,每队4场,但每场比赛对两队有效。要在四个时隙中进行
N*2
匹配,我们必须平均每个时隙的
N/2
匹配。我们一次最多可以进行
floor(N/2)
匹配。如果N为奇数,
楼层(N/2)

如果存在只适用于偶数N的解决方案,它会有用吗?

一个简单的算法:

Round 1
1  2  3  4
8  7  6  5
然后旋转位置2-8

Round 2
1  8  2  3
7  6  5  4

Round 3
1  7  8  2
6  5  4  3

(如果有一个奇数,可以通过添加一个虚拟配对来表示再见,但正如Patricia Shanahan所指出的,并不是每个队都会参加每一轮比赛。因此需要偶数个队和至少六个队来满足要求。)

一个简单的算法:

Round 1
1  2  3  4
8  7  6  5
然后旋转位置2-8

Round 2
1  8  2  3
7  6  5  4

Round 3
1  7  8  2
6  5  4  3


(如果有一个奇数,可以通过添加一个虚拟配对来表示再见,但正如Patricia Shanahan所指出的,并不是每个队都会打每一轮。因此需要偶数个队,至少六个队才能满足要求。)

此算法适用于任意数量的队
假设一场比赛有6支球队

这个解决方案基本上告诉您如何填写6x6矩阵,矩阵中的每个条目都是行与列中团队之间的匹配
考虑算法中的几个规则
1.从左到右和从上到下递增矩阵中的值<代码>材料[0][0]=1

2.每当
i==j
时,则填写
[n-1][j]
处的矩阵,而不是
[i][j]
。基本上,在
i==j

3.当矩阵中的条目达到6时,将其设为1

我们将遵循此规则,从
[0][0]
列开始填充矩阵。 表示首先我们将填充第0列的每一行,然后移动到第1列,依此类推。
-在
[0][0]
中,应用规则2。因此,填充
mat[n-1][0]=0

-在
mat[1][0]
中,填写下一个数字ie 2,同样填写
[2][0]、[3][0]、[4][0]

-现在第1列以值2开头
-
mat[1][0]=2
-在
mat[1][1]
应用规则2,填写当前列的最后一行,即
mat[n-1][1]=3


如果你想让每一支球队只和另一支球队打一场比赛,可以使用下三角
如果你想让每支球队和其他球队打两场比赛,一个主客场同时使用下三角和上三角

希望你们能理解我的解决方案

干杯

此算法适用于任何数量的团队
假设一场比赛有6支球队

这个解决方案基本上告诉您如何填写6x6矩阵,矩阵中的每个条目都是行与列中团队之间的匹配
考虑算法中的几个规则
1.从左到右和从上到下递增矩阵中的值<代码>材料[0][0]=1

2.每当
i==j
时,则填写
[n-1][j]
处的矩阵,而不是
[i][j]
。基本上,在
i==j

3.当矩阵中的条目达到6时,将其设为1

我们将遵循此规则,从
[0][0]
列开始填充矩阵。 表示首先我们将填充第0列的每一行,然后移动到第1列,依此类推。
-在
[0][0]
中,应用规则2。因此,填充
mat[n-1][0]=0

-在
mat[1][0]
中,填写下一个数字ie 2,同样填写
[2][0]、[3][0]、[4][0]

-现在第1列以值2开头
-
mat[1][0]=2
-在
mat[1][1]
应用规则2,填写当前列的最后一行,即
mat[n-1][1]=3


如果你想让每一支球队只和另一支球队打一场比赛,可以使用下三角
如果你想让每支球队和其他球队打两场比赛,一个主客场同时使用下三角和上三角

希望你们能理解我的解决方案

干杯

一共有五支队伍吗?非常感谢。不,队伍的数量是可变的。有五支队伍吗?非常感谢。不,团队的数量是可变的。非常感谢,这似乎是合乎逻辑的。是的,这仍然非常有用,如果一个或多个球队不能打满4场比赛,p