我正在尝试使用以下代码在图中找到三角形:
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是否具有内置方法来查找三角形?
答案 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]]