Javascript 在没有重复项的锦标赛中为玩家查找所有组合
对于桌上足球比赛,我有以下要求:Javascript 在没有重复项的锦标赛中为玩家查找所有组合,javascript,algorithm,math,Javascript,Algorithm,Math,对于桌上足球比赛,我有以下要求: 有两种类型的球员A(学生)和B(教师)。(为了简单起见,我们假设A和B玩家的数量相同)。16名学生和16名教师 桌上足球赛应该有尽可能多的回合 一轮意味着:每名球员与一名队友一起与另外两名球员进行一场比赛 每轮比赛,一名球员都需要一名以前从未共事过的队友。“新”玩家 队友必须是不同类型的(学生总是和老师一起玩) 来自对方球队的每个球员也必须是“新球员”(既不是以前的对手,也不是以前的队友) 例如: 我是一名学生(a型球员),与老师T_John(B型球员)作为
- 有两种类型的球员A(学生)和B(教师)。(为了简单起见,我们假设A和B玩家的数量相同)。16名学生和16名教师
- 桌上足球赛应该有尽可能多的回合
- 一轮意味着:每名球员与一名队友一起与另外两名球员进行一场比赛
- 每轮比赛,一名球员都需要一名以前从未共事过的队友。“新”玩家
- 队友必须是不同类型的(学生总是和老师一起玩)
- 来自对方球队的每个球员也必须是“新球员”(既不是以前的对手,也不是以前的队友)李>
for (var i = 0; i < availablePlayers.length; i++) {
var player = availablePlayers[i];
if (player == this || player.hasPlayedWith(this))
continue;
if (!teamMate && player.type != this.type &&
(!opponent1 || !player.hasPlayedWith(opponent1))) {
teamMate = player;
count++;
}
else if (!opponent1 && (!teamMate || !player.hasPlayedWith(teamMate))) {
opponent1 = player;
count++;
}
else if (opponent1 && !opponent2 &&
player.type != opponent1.type &&
!player.hasPlayedWith(opponent1)) {
opponent2 = player;
count++;
}
if (count == 3) {
return [
new Team(this, teamMate),
new Team(opponent1, opponent2)
];
}
}
for(var i=0;i
这里是一个小提琴与整个原型,可视化的球员,球队,比赛和回合。
我很确定一定有某种模式或算法来计算最佳组合。想法还是建议
非常感谢您的帮助。请更新这些规则,因为虽然知道此算法的人知道您在说什么,但您对它的描述不够清楚=)第2点没有解释地谈论“锦标赛”,第3点的“随机或定义逻辑”不是“或”。您的算法可以规定使用随机,使随机行为成为定义的逻辑。第4点需要改写,第5点毫无意义:两支球队都是对立的球队。不,这不是吹毛求疵:当你描述一个算法时,你需要的技能之一就是能够准确地描述需求。你说有A型和B型,所以听起来好像有两支对立的A队和B队永远不会改变。但从你的第5点来看,听起来球员们可以从队伍中交换球队,“既不是以前的对手,也不是以前的队友”。请澄清这一点,感谢迈克·波马克斯·卡默曼和肯塔的支持。我已经更新了我的问题。希望它更容易理解。@KentaNomoto感谢您的反馈。不,每个队由一名a型球员(学生)和一名B型球员(教师)组成。我希望新的解释能清楚地说明这一点。我不知道我是否会尝试这样做,只是一个提示:生成所有有效的双打(如网球),每个生成的双打都会考虑以前生成的双打。从S中得到一组S。生成所有可能的轮,以便每轮C|S | ^8,每轮为一个节点,如果两轮中没有双精度,则将轮链接在一起。那就把最大的集团从中除掉