2014-01-12 20 views
1

例如,給定集合{1,2,...,11,12}, 一個可能的4組,每組3是給定一組12個整數,如何遞歸地生成所有可能的4組3個? C++

(12,1,7) (3,6,9) (4,11,2) (10,8,5)

+0

暗示:沒有重複的組合應該是一個很好的起點。 – 2014-01-12 08:48:46

+0

還有一個提示:生成所有可能的12個組,並將它們從第一個元素分成4個部分。 – vershov

+3

我認爲這個問題可能會被擱置得太快(出於上述原因)。這個問題比上面給出的兩個「解決方案」更微妙:如果不允許四個組的排列 - 即如果應該只有(abc)(def)(ghi)(jkl)和(def)( abc)(ghi)(jkl),那麼你需要努力工作以產生獨特的羣體。它可以完成,但它不是一次性的。話雖如此,聽起來像是功課,我看不到任何努力嘗試解決方案。這是一個更好的理由擱置... – Floris

回答

1

想想階乘計算是如何工作的 - 如果你想要所有可能的排列組合,你會計數n!,因爲那是選擇第一個元素的方法的數量,乘以之後選擇第二種方式的次數,依此類推。這應該相當容易實現循環,實際上遍及所有可能性和遞歸構建所有這些排列。

在(或在此期間)爲一行中的所有可能元素選擇一個排列後,您只需要消除多餘的可能性 - 一個或多個三元組是一個簡單的另一個的混洗,所有的三胞胎都是相同的,但是這四組排序不同。

一種簡單的方式來實現也就是每個組基於每個組的所述第一元件上的內部(即(12 2 1) (5 4 2) .. --> (1 2 12) (2 4 5) ..)排序,排序一遍,然後越過排列的列表,並消除連續的相同元件

相關問題