作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
考虑以下图结构(借自 this question ):
G = networkx.DiGraph()
G.add_edges_from([('n', 'n1'), ('n', 'n2'), ('n', 'n3')])
G.add_edges_from([('n4', 'n41'), ('n1', 'n11'), ('n1', 'n12'), ('n1', 'n13')])
G.add_edges_from([('n2', 'n21'), ('n2', 'n22')])
G.add_edges_from([('n13', 'n131'), ('n22', 'n221')])
产生:
n---->n1--->n11
| |--->n12
| |--->n13
| |--->n131
|--->n2
| |---->n21
| |---->n22
| |--->n221
|--->n3
我可以对从节点 n
开始的后继执行深度优先搜索并得到:
> dfs_successors(G, 'n')
{'n': ['n1', 'n2', 'n3'],
'n1': ['n12', 'n13', 'n11'],
'n13': ['n131'],
'n131': ['n221'],
'n2': ['n22', 'n21']}
但是,当我对前辈进行深度优先搜索时,例如节点 n221
,没有任何反应:
> dfs_predecessors(G, 'n221')
{}
我希望输出是:
{'n221': ['n22', 'n2', 'n']}
这里出了什么问题,我怎样才能得到预期的行为?
最佳答案
dfs_predecessors() 函数只给出直接的前驱。因此,如果您这样说(来自节点“n”的 G 的 DFS 并从“n22”回顾一个链接)
>>> print(networkx.dfs_predecessors(G, 'n')['n221'])
n22
你得到了你想要的一部分。
获取DFS树中从n221回到根的路径:
>>> T = networkx.dfs_tree(G,'n')
>>> print(networkx.shortest_path(G.reverse(),'n221','n'))
['n221', 'n22', 'n2', 'n']
关于python - Networkx 图搜索 : dfs_successors vs. dfs_predecessors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21866902/
考虑以下图结构(借自 this question ): G = networkx.DiGraph() G.add_edges_from([('n', 'n1'), ('n', 'n2'), ('n',
我是一名优秀的程序员,十分优秀!