Я хотел бы знать, сколько ребер следует за каждым узлом в сети. Я создал график из 20 узлов, но он предпочтительно должен работать для любого количества узлов. Код приведен здесь, и изображение графика также показано.
def create_graph(number_of_nodes):
# Set seed to get reproducible graph
seed = 10
random.seed(seed)
np.random.seed(seed)
# Create a random tree with x nodes
global G
G = nx.random_tree(number_of_nodes, seed=seed)
pos = nx.nx_pydot.graphviz_layout(G, prog='dot', root=0)
# Draw the graph
nx.draw(G, pos, with_labels=True)
plt.show()
return G
create_graph(20)
Рисунок, показывающий график
У меня есть код, который работает, когда график меньше, то есть не имеет много ветвей. Однако в этом примере он не работает с 20 узлами.
# Dictionaries for traversing
d = dict(nx.bfs_successors(graph, root_node))
print(d.items())
key_to_value_lengths = {k: len(v) for k, v in d.items()}
print(key_to_value_lengths)
edges_succeeding = {}
total_removed = 0
for k, v in key_to_value_lengths.items():
total = sum(key_to_value_lengths.values())
edges_succeeding[k] = total - total_removed
total_removed = total_removed + key_to_value_lengths[k]
print("Number of edges succeeding " + str(edges_succeeding))
Вывод, который я получаю, таков:
Number of edges succeeding {0: 19, 6: 17, 14: 16, 15: 15, 16: 12, 10: 11, 1: 10, 2: 8, 5: 7, 7: 6, 8: 5, 11: 4, 18: 3, 13: 1}
Таким образом, это верно для первых нескольких узлов, но заканчивается неправильно после узла 16, потому что оно также включает ветвь на другая сторона (после узла 10).
Я хочу, чтобы словарь edges_succeeding
возвращал число ребер, следующих за этим узлом, в данной ветви. Например, верным для узла 16 будет 16: 8
, а не 16: 12
Предпочтительно, он также должен иметь возможность увеличивать и уменьшать его для любого заданного размера сети.