python - 沿着路径/分支迭代: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')])
我想做的是:
- 检测两条路径何时从单个节点开始(这已经完成)
- 迭代每个路径的属性。首先迭代其中一个分支/路径,然后迭代另一个路径。在我创建的图中,这将是:首先迭代分支的属性: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...
解决方案
我想得到每个分支的属性总和
这将输出每条路径的总和,如果那是你正在寻找的。
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
推荐阅读
- java - Java 简化一个函数
- javascript - 将箭头函数移动到 Javascript 中的另一个文件中
- scheme - 如何在方案中导入模块?
- sorting - Ada 排序复合数组
- java - Java - 使用反射递归修改对象值
- postgresql - PostgreSQL 11 对索引应该足够的分区表进行并行 seq 扫描
- authorization - Azure AD 的基于资源的授权?
- syntax - What does this semantic do?
- java - 如何使用其上下文(android,java)从另一个类调用函数
- angular - 使用 Jasmine 测试 .then 或 .catch 的返回值