【发布时间】:2020-06-05 07:29:16
【问题描述】:
假设我有一张图,比如pictured here,底部节点从左到右分别标记为 4、5、6、7、8。 我将底部节点分为三组:(4,5)、(6,7) 和 (8,9)。我们分别称它们为第 1 组、第 2 组和第 3 组。我需要将组1中的节点连接到组2和组3中的节点,并且我需要将组2中的节点连接到组3中的节点。同一组中的两个节点无法连接到同一组中的同一节点不同的组。例如,这是一个possible solution。我试图找出一个很好的代码来找到所有这些组合。理想情况下,我希望答案看起来像这样:
[[(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 之间添加一条边。这就是我希望它们成对出现的原因(并且在很好的行中,所以我可以轻松地遍历它们以更改我的邻接矩阵)。我希望这有帮助!
【问题讨论】:
标签: python combinations permutation graph-theory itertools