2010-07-28 114 views
1

我試圖以特定方式對組合列表進行排序。 考慮數字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 

正如你可以在每個塊之後看到每隊有一場比賽,兩場比賽,...
我could'n得到一個算法來排序列表這從:

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中玩ist不玩...

感謝您對t他在c#中的問題與.NET 4可能使用Linq來操縱列表。

SOLUTION:

循環賽
http://en.wikipedia.org/wiki/Round-robin_tournament
Round Robin Tournament algorithm in C#

+0

我還沒有深入地讀過你的問題,但是你能否讓它更清楚一點,你可以更清楚地知道你所建議的許多不同的輸出和格式化方法中的哪一個是你想要的? – 2010-07-28 09:01:18

+0

它不是關於輸出,數字只是爲了解釋。 – Gpx 2010-07-28 09:36:40

+1

對於任何想要Google的人來說,這就是所謂的循環賽。 – 2010-07-28 12:22:09

回答

0

你不是真的需要理清這(從我所看到的)。

您需要做的就是創建3個項目的「集合」,其中2個團隊的項目是{A,B}。

因此,爲了開始,選擇任何隨機項目(並從所有組合列表中刪除),然後你說:{1,3}。然後選擇另一個隨機數(並刪除),其中A和B的{A,B}!= 1或3。最後一步很簡單,因爲您只剩下2個選項。選擇任何有效的選項,從列表中刪除。再重複4次。

+0

不知道它是否會工作,但我嘗試。 – Gpx 2010-07-28 09:37:21

+0

問題是:他會在下一輪{13,24,x}中找到{12,34,56}。在x唯一可能的解決方案是56! – Gpx 2010-07-28 13:16:15

+0

@Gpx:你也許可以丟棄那個,然後嘗試下一個。 – leppie 2010-07-28 16:46:55