如何检查两个节点是否连接?

时间:2014-07-23 14:01:54

标签: python graph networkx

我有一个NetworkX图,其中包含四个部分连接的节点(a,b,c,d)。如何检查两个节点是否相邻?例如:我怎么能断言ad不相邻?

import networkx as nx
G=nx.Graph()
G.add_edge('a','b',weight=1)
G.add_edge('a','c',weight=1)
G.add_edge('c','d',weight=1)

我尝试了以下操作,但失败了:

nx.is_connected(G) # I assume it checks whether edges are connected at all
nx.connected_components(G) # outputs an object that I can make no use of

3 个答案:

答案 0 :(得分:11)

检查两个节点是否与NetworkX连接的一种方法是检查节点u是否是另一个节点v的邻居。

>>> def nodes_connected(u, v):
...     return u in G.neighbors(v)
... 
>>> nodes_connected("a", "d")
False
>>> nodes_connected("a", "c")
True

注意networkx.is_connected检查图G中的每个节点是否可以从G中的每个其他节点到达。这相当于说G中有一个连接的组件(即len(nx.connected_components(G)) == 1)。 / p>

答案 1 :(得分:6)

这是推荐的方式:

import networkx as nx
G=nx.Graph()
G.add_edge('a','b',weight=1)
G.add_edge('a','c',weight=1)
G.add_edge('c','d',weight=1)

print(G.has_edge('a','d'))  # False
print('d' in G['a']) # False, faster
print(not 'd' in G['a']) # True

答案 2 :(得分:0)

我想您问的是“如何知道两个节点彼此可达” 可以通过此代码解决。

networkx.algorithms.descendants(G, target_nodes)

它返回target_nodesG的所有可达节点。