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

22 投票
3 回答
24442 浏览
提问于 2025-04-18 14:26

我有一个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 个回答

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)。

撰写回答