19

Pythonのnetworkxパッケージを使用しています。

4

5 に答える 5

25

グラフ内の2つのノード間にパスがあるかどうかを確認するには-

>>> import networkx as nx
>>> G=nx.Graph()
>>> G.add_edge(1,2)
>>> G.add_edge(2,3)
>>> nx.has_path(G,1,3)
True
>>> G.add_edge(4,5)
>>> nx.has_path(G,1,5)
False

詳細については、has_path —NetworkX1.7のドキュメントを参照してください。

于 2013-10-27T16:36:54.437 に答える
13
>>> import networkx as nx
>>> G=nx.empty_graph()
>>> G.add_edge(1,2)
>>> G.add_edge(2,3)
>>> G.add_edge(4,5)
>>> nx.path.bidirectional_dijkstra(G,1,2)
(1, [1, 2])
>>> nx.path.bidirectional_dijkstra(G,1,3)
(2, [1, 2, 3])
>>> nx.path.bidirectional_dijkstra(G,1,4)
False
>>> nx.path.bidirectional_dijkstra(G,1,5)
False
>>> 

結果をブール値として使用することもできます

>>> if nx.path.bidirectional_dijkstra(G,1,2): print "path exists"
... 
path exists
>>> if nx.path.bidirectional_dijkstra(G,1,4): print "path exists"
... 
>>> 
于 2010-03-01T03:51:53.573 に答える
10

素集合データ構造の使用:

グラフ内のすべての頂点に対してシングルトンセットを作成してから、グラフ内のすべてのエッジの頂点のペアのそれぞれを含むセットを結合します。

最後に、2つの頂点が同じセットにある場合、それらの間にパスが存在することがわかります。

素集合データ構造に関するウィキペディアのページを参照してください。

これは、パスファインディングアルゴリズムを使用するよりもはるかに効率的です。

于 2011-04-14T15:38:29.673 に答える
7

使用する

shortest_path(G, source, target)

または最短経路法の1つ。ただし、接続をテストする特定のノードが2つしかない場合は、すべてのノード間のパスを返すメソッドを避けてください。

于 2010-03-01T03:52:41.310 に答える
3
于 2010-03-01T03:43:59.490 に答える