web-dev-qa-db-ja.com

2つのノードが接続されているかどうかを確認するにはどうすればよいですか?

4つのノードを持つNetworkXグラフがあります(a,b,c,d)部分的に接続されています。 2つのノードが隣接しているかどうかを確認するにはどうすればよいですか?例: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
14
mcbetz

2つのノードがNetworkXに接続されているかどうかを確認する1つの方法は、ノード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に1つの連結成分があると言うことと同じです(つまり、len(nx.connected_components(G)) == 1)。

14
mdml

これが推奨される方法です。

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
9
Aric

「2つのノードが互いに到達可能であることを知る方法」について質問されたと思います。これはこのコードで解決できます。

networkx.algorithms.descendants(G, target_nodes)

Gtarget_nodesから到達可能なすべてのノードを返します。

0
frhyme