如何生成配對的所有組合?例如,如果我有1, 2, 3, 4
我要生成生成配對的所有組合
(1, 2), (3, 4)
(1, 3), (2, 4)
(1, 4), (2, 3)
我首先想到的是遞歸生成一對,並嘗試從剩餘的號碼加入對。但是,這會導致重複,因爲即使要添加的對是唯一生成的,也會生成(1, 2), (3, 4)
以及(3, 4), (1, 2)
。然後我可以刪除所有重複的東西,但有一個更清潔的算法?
我的僞代碼嘗試:
add_pair(current list, remaining nums)
generate pairs from remaining nums
for every pair generated:
remove numbers used in pair from remaining nums
add pair + add_pair(current list, remaining nums) to current list
我不是很舒服的遞歸又那麼這可能會無法正常工作。在其他地方提到的另一種解決方法是回溯,但我不確定這將如何有效地使用。
'(1,2)'出現在'1,2,3,4,5,6'的輸出中多少次? – 2014-10-05 01:20:19
你是在問一個特定的[tag:C++]代碼的問題,還是隻針對一般的算法?如果是後者,則刪除C++標記,並最終爲已經制定的內容提供一些僞代碼。 – 2014-10-05 01:20:52
@DavidEisenstat我認爲這將是3:'(1,2)'和3,4,5,6''3'3'3'重排[ – qwr 2014-10-05 01:29:33