在图中提取三角形的有效方法

时间:2018-07-10 11:00:35

标签: python networkx

我正在尝试使用以下代码在图中找到三角形:

triangles_list = []

for v1 in G.nodes():
    v1_nebs = G.neighbors(v1)
    if len(v1_nebs)>=2:
        for v2 in v1_nebs:
            for v3 in v1_nebs:
                if v2==v3:
                    continue
                else:
                    if v2 in G.neighbors(v3):
                        list_str = []
                        list_str.append(int(v1))
                        list_str.append(int(v2))
                        list_str.append(int(v3))
                        list_str.sort()
                        triangles_list.append(list_str)

此代码中是否可以进行任何优化,或者networkx是否具有内置方法来查找三角形?

1 个答案:

答案 0 :(得分:3)

另一种方法可能是使用enumerate_all_cliques并检索大小为3的组,因为三角形本质上是大小为3的组。

import networkx as nx

G = nx.complete_graph(5)

cliq_list = list(nx.clique.enumerate_all_cliques(g))

traingle_list = [ x for x in cliq_list if len(x)==3 ]
 #[[0, 1, 2], [0, 1, 3], [0, 1, 4], [0, 2, 3], [0, 2, 4], [0, 3, 4], [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]