【发布时间】:2017-12-30 18:21:53
【问题描述】:
我有一个图表:
为什么在使用最短路径函数后:
nx.shortest_path(g, 0, 6)
为什么输出路径是[0, 3, 6]?为什么不[0, 2, 6]?在上述情况下,算法shortest_path() 的路径[0, 3, 6] 的选择是否总是明确的?
【问题讨论】:
-
“明确”是什么意思?这恰好是在搜索顺序中首先找到的路径...如果您以不同的顺序连接节点或边缘存储的底层实现发生变化,那么可能首先尝试通过节点
2的路由.. . -
这可能取决于您指定边缘的顺序。所以同一张图可以有不同的最短路径。您总是获得一条最短路径。
-
如果您查看 networkx 代码,您应该能够看到它是如何存储其边缘的......它是否意味着对邻接列表的任何排序或使用其他东西将提供更多细节......
-
如果 networkx 按照添加的顺序遍历边缘......那么是的......否则 - 排序可能是它们存储方式的副作用,并且在这种情况下恰好发生 -第一条搜索路径恰好穿过边缘到节点 3 而不是节点 2...
-
总而言之……这取决于networkx是否将您的图形存储为
{0: [3, 2], 2: [6, 4], 3: [5, 6]},并且边缘是有序的,因为它们是列表,或者是{0: {3, 2}, 2: {6, 4}, 3: {5, 6}},它们是更有效的集合检查目标,但迭代顺序是幸运的(尽管一致,除非它们发生突变)
标签: python networkx shortest-path