我有一個2元組列表,並希望從列表中生成儘可能多的3元組。例如:從2元組列表生成3元組的最大數目
#!/usr/bin/python
import itertools
a = list(itertools.combinations([1,2,3,4,5,6,7,8,9], 2))
即
a = [(1, 2), (1, 3), ..., (1, 9), (2, 3), ..., (8, 9)]
現在我想找到可以從該列表中生成的循環3元組的最大數量,一個這樣的3元組將是:
(1,2),(2,3),(1,3) -> (1,2,3)
每個2元組只能使用一次。我想我可以使用暴力方法,但我有一種感覺,它可以以更聰明的方式完成。有什麼想法嗎?
對於任何有興趣的人來說,這個問題是一個調度問題。 n個球隊在一個賽季中應該互相打一次球。一個賽季包括一系列比賽,理想情況下比賽由3支隊伍組成,其中3支隊伍相互對戰(總共3場比賽)。目標是避免只有兩支球隊的比賽。
你能涉及到[圖中的週期](http://www.geeksforgeeks.org/detect-cycle-undirected-graph/)? –
我想,但是如果我們用無向圖中的邊來考慮這個問題,我們正在處理一個完整的圖:https://en.wikipedia.org/wiki/Complete_graph。然後,我們希望在該圖中找到儘可能多的3個循環。 – Lennart