排序所有可能的组合

时间:2010-07-28 08:58:49

标签: list c#-4.0

我试图以特定方式对组合列表进行排序。 将数字1-6视为团队,如果每个团队都能按时对阵其他团队,我们将此列表视为可能的匹配:

12 23 34 45 56
13 24 35 46 
14 25 36        
15 26           
16

所以现在我想要的是“比赛日”:

12    13    14    15    16
34    46    26    24    23
56    25    35    36    45

正如你在每个区块后看到的那样,每支球队都有一场比赛,两场比赛,...... 我无法得到一个算法来对此列表进行排序:

12 13 14 15 16 23 24 25 26 34 35 36 45 46 56

12 34 56 13 46 25 14 26 35 15 24 36 16 23 45

其他: 有了奇怪的球队数据,创造比赛日的方式变得更糟,因为你必须离开球队当天:

12 23 34 45
13 24 35    
14 25       
15  

12    23    14    24    25
34    45    35    15    13

在第一个区块5中没有在第二个区块中进行游戏1没有播放....

感谢您在c#中使用.net 4对此问题的任何帮助或想法,可能使用Linq来操作列表。

解决方案:

循环赛锦标赛 http://en.wikipedia.org/wiki/Round-robin_tournament
Round Robin Tournament algorithm in C#

1 个答案:

答案 0 :(得分:0)

你真的不需要对此进行排序(从我能看到的内容)。

您需要做的就是创建3个项目的“集合”,其中2个团队的项目为{A,B}。

所以首先,挑选任何随机项目(并从所有组合列表中删除),然后你说:{1,3}。然后为A和B选择另一个随机数(并删除),其中{A,B}!= 1或3。最后一步很简单,因为您只剩下2个选项。选择任何有效选项,从列表中删除。再重复4次。