我有一个使用 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/