首页 > 解决方案 > 沿着路径/分支迭代:Networkx

问题描述

我正在尝试遍历所附图表的每个分支。

这是创建的图表:

A = nx.DiGraph()

A.add_node('S1', e=1)
A.add_node('S2', e=2)
A.add_node('S3', e=3)
A.add_node('S4', e=4)
A.add_node('S5', e=5)
A.add_node('S6', e=6)
A.add_node('S7', e=7)
A.add_node('S8', e=8)

A.add_edges_from([('S1','S2'),
                  ('S2','S3'),
                  ('S2','S4'),
                  ('S4','S5'),
                  ('S3','S6'),
                  ('S5','S8'),
                  ('S6','S7'),
                  ('S7','S8')])

在此处输入图像描述

我想做的是:

  1. 检测两条路径何时从单个节点开始(这已经完成)
  2. 迭代每个路径的属性。首先迭代其中一个分支/路径,然后迭代另一个路径。在我创建的图中,这将是:首先迭代分支的属性:S3-S6-S7,然后是分支 S4-S5。当节点的入站度(在本例中为 S8)大于 1 时,我停止迭代。

到目前为止我的代码没有遍历整个分支,我不知道如何解决它。

nodes = A.nodes(data=True)

for succ in A.neighbors('S2'):
    print(nodes[succ]['e'])
    for node in A.neighbors(succ):
        print(nodes[node]['e'])
        if A.in_degree(node) > 1:
            break
Output:
3
6
4
5

PD:如果有很大的错误,我很抱歉,我刚刚开始使用 Python 和 Networkx...

标签: pythonnetworkxgraph-theory

解决方案


我想得到每个分支的属性总和

这将输出每条路径的总和,如果那是你正在寻找的。

import networkx as nx

A = nx.DiGraph()

A.add_node("S1", e=1)
A.add_node("S2", e=2)
A.add_node("S3", e=3)
A.add_node("S4", e=4)
A.add_node("S5", e=5)
A.add_node("S6", e=6)
A.add_node("S7", e=7)
A.add_node("S8", e=8)

A.add_edges_from(
    [
        ("S1", "S2"),
        ("S2", "S3"),
        ("S2", "S4"),
        ("S4", "S5"),
        ("S3", "S6"),
        ("S5", "S8"),
        ("S6", "S7"),
        ("S7", "S8"),
    ]
)

for path in nx.all_simple_paths(A, source="S1", target="S8"):
    print(path, sum(A.nodes[n]["e"] for n in path))

输出

['S1', 'S2', 'S3', 'S6', 'S7', 'S8'] 27
['S1', 'S2', 'S4', 'S5', 'S8'] 20

推荐阅读