我使用networkX来计算端点之间的所有最短路径。
在像graph1这样的示例拓扑中,权重在R1< - >之间不是对称的。 R2,我希望看到从R1到R3的最短路径, 但我看到两个(见下文)。我的目标是复制OSPF或IS-IS等协议。
有没有办法实现这一目标? (指标/权重不能修改,直接从路由器获得)
示例:
>>> from networkx import nx
>>> graph1 = {
...
... 'R1':{'R2':{'weight':50000},'R3':{'weight':200}},
... 'R2':{'R1':{'weight':100},'R3':{'weight':100}},
... 'R3':{'R1':{'weight':200},'R2':{'weight':100}}
... }
>>> network_graph = nx.from_dict_of_dicts(graph1)
>>> print [p for p in
nx.all_shortest_paths(network_graph,source='R1',target='R3', weight='weight')]
[['R1', 'R3'], ['R1', 'R2', 'R3']]
答案 0 :(得分:1)
networkx中的默认图形不是有向图(这是可以调用非对称边的网络),需要明确指定:
network_graph = nx.from_dict_of_dicts(graph1, create_using=nx.DiGraph())
这将得出正确答案:
print [p for p in nx.all_shortest_paths(network_graph,source='R1',target='R3', weight='weight')]
[['R1', 'R3']]