如何检查两个节点是否连接?
我有一个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
3 个回答
7
我觉得你是在问“怎么知道两个节点是否能互相到达”。
这个问题可以通过下面的代码来解决。
networkx.algorithms.descendants(G, target_nodes)
这段代码会返回在图 G
中,从 target_nodes
能到达的所有节点。
12
这是推荐的做法:
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('d' not in G['a']) # True
21
检查两个节点是否连接的一种方法是看看一个节点 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 中只有一个连通部分(也就是说 len(nx.connected_components(G)) == 1
)。