我有一个非常大的网络(来自整个国家的公路网络),我将其加载到networkx中以计算点之间的距离。如果我只想知道两点之间的最快路线,则此方法效果很好并且非常快。但是,我也想知道备选路线(如果一条路线例如是1000公里,我也想知道1010、1018、1032和1042km的备选路线)。我曾考虑过使用networkx的all_simple_paths函数,但这确实很慢,并且需要几天才能运行。有人可以建议替代方法吗?
谢谢!
答案 0 :(得分:1)
Networkx具有一个内置算法,该算法可以生成最短路径,然后是下一条最短路径,然后是下一条最短路径,等等。
例如:
import networkx as nx
G = nx.Graph()
G.add_edges_from([[0,1], [1,2], [2,3], [0,2], [0,3]])
X = nx.shortest_simple_paths(G, 0, 3) #generator to find paths from 0 to 3 in order from shortest to longest.
for x in X:
print(x)
> [0, 3]
> [0, 2, 3]
> [0, 1, 2, 3]
#note that X is now empty because it is a generator
for x in X:
print(x) #nothing to see here
>
#if you just want the first two:
X = nx.shortest_simple_paths(G, 0, 3)
for k in range(2):
print(next(X))
> [0, 3]
> [0, 2, 3]
此算法将找到所有路径,但是将其设置为仅在需要第k条最短路径时才做其他工作来计算第k条最短路径,然后又将其遗忘了。有关生成器的更多信息,请参见Understanding generators in Python。