我使用 networkX 计算端点之间的所有最短路径。
在像 graph1 这样的示例拓扑中,其中 R1 <-> R2 之间的权重不对称,我希望只看到一条从 R1 到 R3 的最短路径,但是我看到了两条(见下文)。我的目标是复制 OSPF 或 IS-IS 之类的协议。
有什么方法可以实现吗?(metrics/weights 不能修改,直接从路由器获取)
例子:
>>> 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']]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句