Python NetworkX非对称权重

Python NetworkX非对称权重,python,graph-algorithm,networkx,Python,Graph Algorithm,Networkx,Im使用networkX计算端点之间的所有最短路径 在像graph1这样的拓扑示例中,R1和R2之间的权重不是对称的,我希望只看到一条从R1到R3的最短路径, 然而,我看到了两个(见下文)。我的目标是复制像OSPF或is-is这样的协议 有没有办法做到这一点?(无法修改度量/权重,直接从路由器获取) 例如: >>> from networkx import nx >>> graph1 = { ... ... 'R1':{'R2':{'weig

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

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']]

非常感谢你的回答。很好!