2015-11-23 57 views
1

我有一个节点和边的列表,但我想要一些边的长度是两个而不是一个。因此,当使用内置算法计算节点之间的距离时,它将返回如何在Networkx中指定边长来计算最短距离?

例如,如果我有(1,2),(2 *,3),(4 *,5)作为节点之间的边,如果星号节点之间的距离为2,则(1,2)之间的距离应该为1,(2,3)应该为2而不是1,然后(1,5)之间的距离应该为5的3.

当添加节点我试过G.add_edge(4,5,length=2)nx.shortest_path_length(G,source=4,target=5))仍然返回1而不是两个。我怎样才能指定边长?

+0

:'长度措施接下来的边数。“ – furas

+0

所以你说的是我应该加权边缘并使用Dijkstra来代替? – SharpObject

回答

5

您需要连接到您的边缘length属性,然后指定您希望通过这些长度加权找到最短路径时:从`shortest_path_length`文档

# Had to add an edge from 3 to 4 to your example edges 
# or there's no path from 1 to 5 
edges = [(1, 2, 1), (2, 3, 2), (3, 4, 1), (4, 5, 2)] 

G = networkx.Graph() 

for start, end, length in edges: 
    # You can attach any attributes you want when adding the edge 
    G.add_edge(start, end, length=length) 

networkx.shortest_path_length(G, 1, 5, weight='length') 
Out[8]: 6