我正在使用Python的networkx包。
答案 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)
dijkstra_path(G, source, target)
返回加权图G中从源到目标的最短路径。