Путь, начинающийся и заканчивающийся в одном и том же узле, называется циклом. Поскольку циклы могут повторяться, всякий раз, когда у вас есть цикл, число возможных путей бесконечно. Вы можете найти список циклов, которые составляют основу для циклов G, вызвав nx.cycle_basis(G)
.
Если вы хотите явно вычислить все пути без повторений узлов, это можно сделать следующим образом:
import networkx as nx
G=nx.Graph()
G.add_edges_from([("d", "e"), ("a", "b"), ("a","c"), ("c","d"), ("a",1), (1,"d"), ("a",2), (1,2)])
node_to_cycles = {}
for source in G.nodes():
paths = []
for target in G.neighbors(source):
paths += [l + [source] for l in list(nx.all_simple_paths(G, source=source, target=target)) if len(l) > 2]
node_to_cycles[source] = paths
print(node_to_cycles['a'])
Эта реализация основана на nx.all_simple_paths
. Поскольку у простого пути есть только один экземпляр каждого узла, мы ищем пути к каждому соседу узла, а затем объединяем сам узел.