python - NetworkX 非对称权重

标签 python graph-algorithm networkx

我正在使用 networkX 计算端点之间的所有最短路径。

在像 graph1 这样的示例拓扑中,其中权重在 R1 <-> R2 之间不对称,我希望看到从 R1 到 R3 的只有一条最短路径, 但是我看到两个(见下文)。我的目标是复制像 OSPF 或 IS-IS 这样的协议(protocol)所做的事情。

有什么办法可以实现吗? (metrics/weights不可修改,直接从router获取)

例子:

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

关于python - NetworkX 非对称权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44680978/

相关文章:

python - 简单的肥尾对数分箱

python - pandas DataFrame 删除连续的重复项

python - 为 python matplotlib.pyplot 等高线图指定 x 和 y 范围

Python PLY 赋值操作失败

c++ - 连接组件计数

Python 网络 x : find all edges for a given path in a multiDiGraph

python - pandas 在 csv 上提高 OutOfBoundsDatetime 但不在 sql 上提高 OutOfBoundsDatetime

algorithm - 如何检查一个点在一个平面(或多个平面)的一侧?

algorithm - 双向 Dijkstras 和 A* 算法

python-3.x - 如何使用 'random' 和 'networkX' 库生成图形?