有没有算法来解决我的情况?

时间:2013-01-07 06:03:19

标签: c#

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

案件是这样的;我有一组12人分为4组。这是一系列3轮的初始阵容。

我的问题我这个;如何在以下两轮中重新渲染这些群组,以便群组中的人们之前没有见过面?

我希望重新渲染的组是唯一的,例如。第1轮人员不得在接下来的两轮比赛中加入第2人或第3人的团体。如果第1人与第4轮组成人员组4和第5组,则这些人员也应在最后一轮中被排除在外。

第1组

人1,人2,人3

第2组

人4,人5,人6

第3组

第7人,第8人,第9人

第4组

人10,人11,人12

2 个答案:

答案 0 :(得分:1)

试试这个:

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
}

答案 1 :(得分:1)

听起来你需要一个Combination算法。有关像性能等组合的更多详细信息,请检查here,对于带有说明的代码示例,您可以查看here
您的具体实施是12人组合,一次3人,不重复。这为您提供了220个可能的组 检查同一两个人之前是否在一个小组中的一种方法是保留已经形成的小组的记录,并根据记录检查任何新的小组,以查看被比较的两个小组是否有任何两个人的共同点。