NetworkX非对称权重

时间:2017-06-21 15:57:15

标签: python graph-algorithm networkx

我使用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']]

1 个答案:

答案 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']]
相关问题