Graph NetworkX中节点的上游和下游

Graph NetworkX中节点的上游和下游,graph,networkx,upstream-branch,Graph,Networkx,Upstream Branch,我不熟悉Python中的Networkx。我试图选择一个节点,并获取该节点上游和下游的所有节点。例如,对于上游节点2,我想返回节点1、6和7。对于下游节点2,我想返回3、4、8、9和5。节点的顺序无关紧要。有没有快速的方法将它们作为列表返回 我假设上游/下游,这是一个有向图,你指的是传入/传出边及其父/子边?您可以使用宽度优先树搜索(bfs\u树) 见: 例如: g=nx.DiGraph() g、 添加\u边\u自([ (7,6), (6,2), (6,1), (1,2), (2,4),


我不熟悉Python中的Networkx。我试图选择一个节点,并获取该节点上游和下游的所有节点。例如,对于上游节点2,我想返回节点1、6和7。对于下游节点2,我想返回3、4、8、9和5。节点的顺序无关紧要。有没有快速的方法将它们作为列表返回

我假设上游/下游,这是一个有向图,你指的是传入/传出边及其父/子边?您可以使用宽度优先树搜索(
bfs\u树

见:

例如:

g=nx.DiGraph()
g、 添加\u边\u自([
(7,6), 
(6,2), 
(6,1), 
(1,2), 
(2,4), 
(2,3), 
(3,4), 
(4,8), 
(4,9),
(3,5)
])
上游=[n表示nx.traversal.bfs_树中的n(g,2,reverse=True),如果n!=2]
下游=[n表示nx.traversal.bfs_树(g,2)中的n,如果n!=2]

但是如果我误解了,那么你需要澄清你所说的上游/下游是什么意思,因为你展示的图表看起来是无方向的

给定一个节点,如何定义哪些其他节点在上游,哪些在下游?好问题。我有一个根节点,我知道它在图中的位置。我从给定节点向上调用根节点,从给定节点向下调用另一个方向。这有用吗?它是有向图吗?有循环吗?这是一个无向图。所以,从“”到“”的顺序是混乱的。把它转换成有向图不是一件容易的事。有循环吗?谢谢Dan。我尝试了遍历函数,但它对我不起作用。主要原因是我的图不是有向图。因此,节点“从”“到”的顺序是混乱的。我试图将其视为一个无向图。如果您的图是无向图,那么就没有上游/下游的概念,除非有特定的节点属性告诉您这一点。在这种情况下,使用广度优先搜索。我知道根节点。这有助于定义上游和下游。这就足够解决它了?如果它是一个非循环图,并且你知道根节点,你可以这样定义方向。如果存在循环,除非可以用另一种方法构建有向图,否则就没有运气。遍历您的图并将其构造为有向图,这可能会得到您想要的结果,但是如果没有关于图本身的更多细节,我无法告诉您。您可以使用这些函数来查找循环:谢谢Dan,让我看一下。我会随时通知你的。