【发布时间】:2018-12-22 12:54:21
【问题描述】:
networkx里面有这样的功能
nx.all_simple_paths(G,source=0,target=5)
它返回所有路径,但如果有很多可能的路径,它会工作很长时间。
如何立即获得任何路径?
【问题讨论】:
networkx里面有这样的功能
nx.all_simple_paths(G,source=0,target=5)
它返回所有路径,但如果有很多可能的路径,它会工作很长时间。
如何立即获得任何路径?
【问题讨论】:
它不会产生all 路径,它会返回一个生成器,该生成器可能会被耗尽以获得all 路径。区别并不挑剔:这正是我们可以回答您的问题的方式。从documentation,all_simple_paths 已经使用深度优先搜索(这就是你想要的)。然后我们可以执行以下操作,
path = next(nx.all_simple_paths(G, source=0, target=5))
如果不存在路径,这将引发StopIteration。另请参阅here 了解更多详情。
【讨论】:
例如:
import networkx as nx
import random
G = nx.complete_graph(4)
paths = list(nx.all_simple_paths(G, source=0, target=3))
print paths
# [[0, 1, 2, 3], [0, 1, 3], [0, 2, 1, 3], [0, 2, 3], [0, 3]]
# get a random idx
idx = random.randint(0, len(paths))
print paths[idx]
# [0, 3] may be
# print all path it
for path in paths:
print path
【讨论】:
nx.all_simple_paths 这正是 OP 想要避免的