我有一个NetworkX图,其中包含四个部分连接的节点(a,b,c,d)
。如何检查两个节点是否相邻?例如:我怎么能断言a
和d
不相邻?
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
答案 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_nodes
中G
的所有可达节点。