我正在尝试为足球小组赛编写算法。例如:我有4支队伍在舞台上。
teams = ['team1', 'team2', 'team3', 'team4']然后我得到了一个独一无二的配对
import itertools
team_pairs = list(itertools.combinations(teams, 2))我的team_pairs是各队之间唯一的比赛
[('team1', 'team2'), ('team1', 'team3'), ('team1', 'team4'), ('team2', 'team3'), ('team2', 'team4'), ('team3', 'team4')]而现在。我怎样才能创建所有的回合?例如:
('team1', 'team2') ('team3', 'team4')('team1', 'team3') ('team2', 'team4')('team1', 'team4') ('team2', 'team3')对于6支球队还是7支球队,如何做到这一点?救命啊!
我解释得不好:
我有11支队伍。然后我把他们分成几个小组。我有:
在每一组中,团队必须与小组中的所有球队一起比赛。让我们参加一个小组,小组如下:
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那我就可以加分了。
但实际上我不明白如何将我的团队(我的team_pairs)分成几天,以及哪一队在哪一天比赛。
发布于 2014-01-26 22:01:58
这个问题可以被看作是一个精确覆盖问题,并且可以像一个带有算法X的Sudoku一样得到解决,其中Python实现在网络上是可用的。
这套需要涵盖的内容包括:
四个队的情况是:
A1, A2, A3, B1, B2, B3, C1, C2, C3, D1, D2, D3, AB, AC, AD, BC, BD, CDB3的意思是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解决这个问题会产生许多可能的安排,本质上是团队和比赛日的排列。选一个,按比赛日点菜,然后比赛。
如果有一个奇数的团队,就没有解决办法。添加一个空队作为假人,不要在其中一方是假人的情况下进行比赛。
https://stackoverflow.com/questions/21368113
复制相似问题