2

networkxdfs_edges()函数将遍历子节点。据我所知, http://networkx.lanl.gov/文档没有指定参数 into dfs_edges()以仅在边缘具有特定标签时进行遍历。

另外,我看了看,dfs_labeled_edges()但这只会告诉您在使用 DFS 遍历图时的遍历方向。

4

2 回答 2

4

没有选项只能遍历具有给定标签的边。如果您不介意制作图表的副本,您可以构建一个新图表,其中只有带有您想要的特定标签的边。

如果这不起作用,那么修改 dfs_edges() 的源代码来做到这一点并不难。例如

if source is None:
    # produce edges for all components
    nodes=G
else:
    # produce edges for components with source
    nodes=[source]
visited=set()
for start in nodes:
    if start in visited:
        continue
    visited.add(start)
    stack = [(start,iter(G[start]))] <- edit here
    while stack:
        parent,children = stack[-1]
        try:
            child = next(children)
            if child not in visited:
                yield parent,child
                visited.add(child)
                stack.append((child,iter(G[child]))) <- and edit here
        except StopIteration:
            stack.pop()
于 2013-05-16T01:55:44.437 回答
0

我有一种对我有用的方法。感谢@Aric 的启发。

它位于https://github.com/namoopsoo/networkx/blob/master/networkx/algorithms/traversal/depth_first_search.py

这是一个名为 dfs_edges_by_label() 的新函数。并且给定一个标签作为输入,它只遍历与标签匹配的边。

于 2013-11-13T18:14:41.790 回答