有没有算法能解决我的案子

本文关键字:我的 解决 算法 有没有 | 更新日期: 2023-09-27 17:51:00

我在我的一个项目中遇到了一点问题,我希望你们能给这件事带来一些清晰的答案。

情况是这样的;我有一个12人的小组,分成4组。这是三轮比赛的初始阵容。

我的问题是这个;在接下来的两轮游戏中,我该如何重新渲染这些群组,使群组中的人之前没有见过面?

我希望重新渲染的组是唯一的,例如。在接下来的两轮比赛中,1号选手不得与2号或3号选手组队。如果第1人与第4人、第5人在第二轮形成一组,这些人也将被排除在最后一轮之外。

组1

人1,人2,人3

组2

人4,人5,人6

3

第7,第8,第9人

集团4

第10人,第11人,第12人

有没有算法能解决我的案子

试试这个:

for (i = 0 to NrGroups-1) do // NrGroups = 4
{
   newGroup + (i+1) = Arr[i] + 
                      Arr[(i+(Arr.length/NrPersonsInGroup))%Arr.length] + 
                      Arr[(i+(Arr.length/NrPersonsInGroup+1))%Arr.length]; // NrPersonsInGroup = 3
}

听起来你需要一个组合算法。想了解更多关于组合的细节,比如性能等,请点击这里;想了解带有解释的代码示例,请点击这里。
你的具体执行是12个人的组合,每次服用3个,没有重复。这给你220个可能的组。
一种检查相同的两个人以前是否在一个组中出现过的方法是保存已形成的组的记录,并对照记录检查任何新组,以查看被比较的两个组是否有任何两个相同的人。