我正在尝试制作一个小型的公共交通路线应用程序。
我的数据用以下结构表示:
graph = {'A': {'B':3, 'C':5},
'B': {'C':2, 'D':2},
'C': {'D':1},
'D': {'C':3},
'E': {'F':8},
'F': {'C':2}}
其中:
我使用的是这里描述的find_shortest_path算法https://www.python.org/doc/essays/graphs/,但它由于递归而相当慢,并且不支持权重。
所以我转到Davide Epstein在这里描述的算法http://code.activestate.com/recipes/119466-dijkstras-algorithm-for-shortest-paths/(在使用heapq的注释中可以找到更好的实现)
它工作得很好,非常快,但我只得到最好的路线,而不是所有可能的路线列表。这就是我坚持的地方。
有人能帮我一下吗,或者至少给我一个方向?我不太擅长图形最短路径算法。
提前谢谢!
毫无疑问,图中会有大量的最短路径。因此在满足时间复杂度的情况下,很难生成所有的最短路径。但是我可以给你一个简单的方法,可以得到你想要的最短路径。
算法
伪代码:
Networkx有一个函数来完成这个任务all_shortest_paths。
它返回所有最短路径的生成器。
我在交通网络分析中遇到过类似的问题。我使用了优秀的python模块NetworkX。它具有在两个节点之间生成所有简单路径的功能。以下是链接:
http://networkx.lanl.gov/reference/generated/networkx.algorithms.simple_paths.all_simple_paths.html
相关问题 更多 >
编程相关推荐