ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – Networkx图搜索:dfs_successors与dfs_predecessors

2019-06-24 15:52:49  阅读:602  来源: 互联网

标签:python graph traversal networkx


考虑以下图形结构(从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,graph,traversal,networkx
来源: https://codeday.me/bug/20190624/1279993.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有