我想找到所有可能的最短路径
这是我的代码:
import networkx as nx
g=nx.Graph()
e=[('a', 'b', 2), ('a', 'c', 6), ('b', 'c', 4), ('c', 'e', 5), ('c', 'f', 1)]
paths=nx.shortest_paths(g,'a','c',weight=True)
print('%s' %list(paths))
这是输出:
[['a', 'c']]
根据权重, a-> b-> c也是最短路径。
为什么不输入?
答案 0 :(得分:1)
而不是shortest_paths
使用all_shortest_paths
功能。
请尝试以下代码:
import networkx as nx
g=nx.Graph()
g.add_edge('a','b', distance=2)
g.add_edge('a','c', distance=6)
g.add_edge('b','c', distance=4)
g.add_edge('c','e', distance=5)
g.add_edge('c','f', distance=1)
print([p for p in nx.all_shortest_paths(g,source='a',target='c',weight='distance')])
输出:
[['a', 'c'], ['a', 'b', 'c']]
答案 1 :(得分:0)
我无法在笔记本电脑上运行您的代码。
networkx-1.11
Python 2.7.13
所以我尝试使用all_shortest_paths
方法,也许在某种程度上它们是相似的。这是我的代码:
import networkx as nx
G = nx.Graph()
e = [('a', 'b', 2), ('a', 'c', 6), ('b', 'c', 4)]
for i in e:
G.add_edge(i[1], i[0], weight=i[2])
paths = nx.all_shortest_paths(G, source='a', target='c',weight=True)
print list(paths)
我得到了相同的输出,我读了关于all_shortest_paths的网络x文档:
(无或字符串,可选(默认=无)) - 如果为None,则为每个 edge有权重/距离/成本1.如果是字符串,请使用此edge属性 作为边缘重量。任何不存在的边缘属性默认为1 。
所以我认为weight=True
无效,因此任何不存在的边缘属性默认为1 ,这就是您无法获得所需结果的原因。
如果您修改了代码并将weight=True
更改为weight='weight'
。
你会得到:
[['a', 'c'], ['a', 'b', 'c']]
希望这有帮助。