python - 如何通过DFS遍历获得边权重和节点到节点

标签 python graph networkx

我有一个使用 NetworkX 构建的有向图,当我以每个节点为源对图进行DFS遍历时,需要打印Node-Node-EdgeWeight详细信息。

我在遍历时成功获取了节点-节点详细信息,但在遍历时还需要边缘属性。

import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

G = nx.DiGraph()

G.add_edge("A", "B", weight=1)
G.add_edge("B", "C", weight=2)
G.add_edge("B", "D", weight=3)
G.add_edge("D", "E", weight=4)
G.add_edge("B", "E", weight=5)
G.add_edge("A", "E", weight=6)

for node in G.nodes:
    print(list(nx.dfs_tree(G, source=node)))

for node in G.nodes:
    print(list(nx.dfs_edges(G, source=node)))

<小时/>

预期输出:

[('A', 'B', 1), ('B', 'C', 2 ), ('B', 'D', 3), ('D', 'E', 4 em>)]

[('B', 'C', 2 ), ('B', 'D', 3 ), ('D', 'E', 4)]

...

<小时/>

实际输出:

[('A', 'B'), ('B', 'C'), ('B', 'D'), ('D', 'E')]

[('B', 'C'), ('B', 'D'), ('D', 'E')]

...

最佳答案

使用get_edge_data上 G 以获取重量。例如,

import networkx as nx
G = nx.DiGraph()

G.add_edge("A", "B", weight=1)
G.add_edge("B", "C", weight=2)
G.add_edge("B", "D", weight=3)
G.add_edge("D", "E", weight=4)
G.add_edge("B", "E", weight=5)
G.add_edge("A", "E", weight=6)

for node in G.nodes:
     for edge in list(nx.dfs_edges(G, source=node)):
         print edge[0], edge[1], G.get_edge_data(edge[0],edge[1])['weight']

输出为:

A B 1
B C 2
B E 5
B D 3
B C 2
B E 5
B D 3
D E 4

关于python - 如何通过DFS遍历获得边权重和节点到节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58567207/

相关文章:

algorithm - Prim 算法和 Dijkstra 算法之间的区别?

linux - tsv 文件两列的并集

python - 如何将 quotient_graph 结果写入文件

python - 使用 Python 比较 NetworkX 中的节点值

python - :Django forms - input boxes not rendering in template

python - 循环遍历 pandas 数据框的更有效方法是什么?

python - pandas 中的数据框成对乘法?

python - python 脚本完成后清除所有 c++ 对象

r - 带有数据框列的 ggplot

python - 在python中生成网络图