Python:如何查找图中2个节点之间是否存在路径?

时间:2010-03-01 03:41:48

标签: python networkx

我正在使用Python的networkx包。

5 个答案:

答案 0 :(得分:19)

检查图表中两个节点之间是否存在路径 -

>>> 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 — NetworkX 1.7 documentation

答案 1 :(得分: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"
... 
>>> 

答案 2 :(得分:10)

使用不相交的集数据结构:

为图中的每个顶点创建一个单例集,然后将包含每对顶点对的集合并用于图中的每个边。

最后,您知道两个顶点之间存在路径,如果它们位于同一个集合中。

请参阅不相交集数据结构的wikipedia页面。

这比使用路径查找算法更有效。

答案 3 :(得分:7)

使用

shortest_path(G, source, target)

或其中一种最短路径方法。如果您只有两个特定节点来测试连接性,那么请清除所有节点之间返回路径的方法。

答案 4 :(得分:3)