如何在玩家之间创建日程安排

时间:2012-09-03 09:08:24

标签: java algorithm

我有团体地图。每个小组都有玩家名单:

Map<String, List<Player>> playerByGroup = new LinkedHashMap<String, List<Player>>();

例如:

地图包含:

 group A: players 1 2 3 4 5 6 
 group B: players 7 8 9 10 11 12 
 group C: players 13 14 15 16 17 18 
 group D: players 19 20 21 22 23 24 

现在我需要创建时间表。每个组中的每个玩家都应该是来自另一组玩家的玩家

例如:

玩家1应该是玩家7到24的玩家,而不是玩家2 - 6

创建

这不是问题

但现在我有问题:

我需要创建包含numberOfPlayer / 2游戏的round。在回合中,每个玩家只能玩一次

例如

1.round should be looks like:

1.game 1 vs 7
2.game 13 vs 19
3.game 3 vs 9
4.game 14 vs 20
5.game 2 vs 8
6.game 15 vs 21
7.game 4 vs 10
8.game 16 vs 22
9.game 5 vs 11
10.game 17 vs 23
11.game 6 vs 12
12.game 18 vs 24

2.round ...

应该只有18轮,因为一名球员应该与18名球员一起比赛。

问题:

问题是只创造18轮,每轮一名球员只打一次

2 个答案:

答案 0 :(得分:0)

提示你:

将其视为组合问题,每组中有6个人。小组数4。你需要每个玩家玩,但不是在组中,那么组合的总数将是 24C4 - 4*(6*(6-1)/2)CCombination)或 (24*23*22*21)(4*3*2*1) - 4*(6*(6-1)/2)。相应的代码。

答案 1 :(得分:0)

我将以你的例子解释你的答案。 在一般情况下很容易扩展它。

将你的轮数分成三个主要组,所以我们每组有6轮。

在第一轮中有六轮:

A组的所有球员都将对B组的所有球员进行比赛,C组的所有球员都将对D组的所有球员进行比赛。

在第二组中,A组的所有队员将对C组的所有队员进行比赛,B组的所有队员将对D队的所有队员进行比赛。 在第三组中,A组的所有队员都将参加D组的所有队员,B组的所有队员都将参加C队的所有队员。