我正在尝试为足球小组赛编写算法。
例如:我有4支队伍在舞台上。
teams = ['team1', 'team2', 'team3', 'team4']
然后我得到了一对独一无二的
import itertools
team_pairs = list(itertools.combinations(teams, 2))
我的球队对是球队之间唯一的比赛
[('team1', 'team2'), ('team1', 'team3'), ('team1', 'team4'), ('team2', 'team3'), ('team2', 'team4'), ('team3', 'team4')]
现在。如何创建所有回合?
例如:
圆形1:
('team1', 'team2') ('team3', 'team4')
圆形2:
('team1', 'team3') ('team2', 'team4')
圆形2:
('team1', 'team4') ('team2', 'team3')
6队或7队怎么做?
请帮忙!!!
我解释的不好:
我有11支队伍。然后我把他们分成小组。
我有:
组1:['team1','team2','team3','team4']
组2:['team1','team2','team3','team4']
组3:['team1','team2','team3']
在每个小组中,该队必须与小组中的所有队一起比赛。
我们分成一组,每组:
teams = ['team1', 'team2', 'team3', 'team4']
赢-3分
草稿1点
宽松-0分
他们不能一次玩所有人。
他们在玩三天。
* first day - team1 vs team2 and team3 vs team4
* second day - team1 vs team3 and team2 vs team4
* third day - team1 vs team4 and team2 vs team3
那我就可以总结要点了。
但我真的不知道如何按天划分我的小组(我的队对)以及哪支球队在哪一天比赛。
最佳答案
这个问题可以看作是一个exact cover问题,可以像一个带有Algorithm X的数独游戏一样解决,其中有Python implementations可以在网上找到。
需要覆盖的集合包括:
每个队和每个比赛日的组合
每次配对
对于四个小组来说:
A1, A2, A3, B1, B2, B3, C1, C2, C3, D1, D2, D3, AB, AC, AD, BC, BD, CD
其中,
B3
表示团队B
在3
日比赛,BD
表示团队B
在D
日比赛。可用的子集是所有比赛对和所有比赛日的组合,这对于四支球队是:
AB1: A1, B1, AB
AB2: A2, B2, AB
AB3: A3, B3, AB
AC1: A1, C1, AC
...
CD3: C3, D3, CD
解决这个问题会产生很多可能的赛程,基本上是球队和比赛日的排列。挑一个,按比赛日点菜,然后玩。
如果有奇数个团队,就没有解决方案添加一个空团队作为虚拟团队,不要在其中一方是虚拟团队的情况下进行比赛。