簡體   English   中英

查找圖節點之間所有可能的連接組合

[英]Finding all possible combinations of connections between nodes of a graph

假設我有一個圖表,就像這里所描繪的那樣,底部節點從左到右分別標記為 4、5、6、7、8。 我將底部節點分為三組:(4,5)、(6,7) 和 (8,9)。 我們分別稱它們為第 1 組、第 2 組和第 3 組。 我需要將組 1 中的節點連接到組 2 和組 3 中的節點,並且我需要將組 2 中的節點連接到組 3 中的節點。同一組中的兩個節點無法連接到同一組中的同一節點不同的組。 例如,這是一個可能的解決方案 我試圖找出一個很好的代碼來找到所有這些組合。 理想情況下,我希望答案看起來像這樣:

[[(4,6),(5,7),(4,8),(5,9),(6,8),(7,9)],
 [(4,6),(5,7),(4,8),(5,9),(6,9),(7,8)],
...etc]

其中對表示連接。 在這里,每一行代表一種可能的組合。 我已經想出了幾種方法(一種使用許多 for 循環,另一種使用 itertools.product),但如果我有 25 個組,每組有 25 個節點,這些方法就不能很好地擴展。 當我在搞砸這個時,我還想也許我正在做某事:

list1=[4,5]
list2=[6,7]
list3 = [8,9]
one_two = [list(zip(x,list2)) for x in permutations(list1,2)]
one_three = [list(zip(x,list3)) for x in permutations(list1,2)]
two_three = [list(zip(x,list3)) for x in permutations(list2,2)]

但我無法完全解決它。 任何幫助,將不勝感激。 謝謝!

澄清:我意識到解釋我為什么這樣做可能會有所幫助。 我正在嘗試找到一種快速更改鄰接矩陣值的方法。 在我上面的示例答案中,每一行都代表我想要對單個圖表進行的所有更改。 因此,例如,第一行說

[(4,6),(5,7),(4,8),(5,9),(6,8),(7,9)]

這意味着我將在節點 4 和 6、5 和 7、4 和 8、5 和 9、6 和 8、7 和 9 之間添加一條邊。這就是為什么我希望它們成對出現(並且在很好的行,所以我可以輕松地遍歷它們以更改我的鄰接矩陣)。 我希望這有幫助!

我們知道:

  • 每個節點都連接到每個組中的一個節點
  • 來自同一組的兩個節點不連接到同一節點
  • 每個組有兩個節點

這意味着如果我們知道 A 組中的一個節點與 B 組的連接,我們也知道 A 中的另一個節點與 B 組的連接。

因此,我們只需要找到一個節點的連接方式,所有其他節點的連接都給定。

對於節點 4,根據上述規則,有 2*2 種可能的方式連接到其他組。 我們可以找到他們

from itertools import product
to_group_2 = product([4], [6, 7])
to_group_2 = product([4], [8, 9])
all_possible_node_4_conns = product(to_group_2, to_group_3)

print(list(all_possible_node_4_conns))

output:

[((4, 6), (4, 8)), ((4, 6), (4, 9)), ((4, 7), (4, 8)), ((4, 7), (4, 9))]

現在,由於給出了所有尚未考慮的連接(如上所述),剩下要做的就是將那些缺少的鏈接添加到列表中,如果需要的話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM