Наивным решением является итерация по всем парам узлов в графе и подсчет количества ребер для каждой пары.Однако многие реальные графы редки - у каждого узла есть только несколько соседей по отношению к общему количеству узлов в графе.Поэтому более разумным решением было бы сделать следующее:
import networkx as nx
# Build a sample graph:
G = nx.MultiDiGraph()
G.add_edges_from([('a', 'b'),('b', 'c'),('c', 'd'), ('b', 'c'), ('b', 'c'), ('a', 'b')])
max = 0
arg_max = ()
for source in G.nodes():
for target in G.neighbors(source):
n = G.number_of_edges(source, target)
if n > max:
max = n
arg_max = (source, target)
print('max # of edges = {}, for nodes: {}'.format(max, arg_max))
Здесь мы выполняем итерации только по соседям каждого узла, поэтому мы даже не улучшаем время выполнения в худшем случае (когда графикклика), мы, вероятно, улучшим его на практике в большинстве случаев.