最短路径搜索 - 使用边缘类型[NetworkX,igraph]

时间:2015-04-06 10:14:04

标签: python graph igraph networkx shortest-path

我使用Directed MultiGraph作为数据结构(两个节点之间可能有多个边缘)。

我想在MultiDiGraph中分配不同类型的边。例如,edge(u,v_1)可以是type_1,另一个edge(u,v_2)可以是type.2。

构建此数据结构后,我想找到最短路径,但路径必须只包含特定类型的边(例如,类型1)。是否可以在NetworkX或python-igraph库中使用?

1 个答案:

答案 0 :(得分:1)

正如@Gabor Csardi在networkx中所建议的那样,要添加类型1的边:使用所需的值添加属性type_1,并将属性type_2添加到最大int(在最短路径计算中要忽略,就好像它不存在一样) )。同样,也可以创建type_2的边缘。

下面的代码显示了一个简单的图表来表明这个想法,其中1到4的最短路径在type_1边缘中缩短为2,在type_2边缘缩短为3。

g=nx.MultiDiGraph()
g.add_edge(1,2,type1=2,type2=sys.maxint) # add edge of type 1 
g.add_edge(1,2,type1=sys.maxint,type2=3) # add edge of type 2
g.add_edge(2,4,type1=2,type2=sys.maxint)
g.add_edge(2,4,type1=sys.maxint,type2=4)
g.add_edge(3,4,type1=3,edge_type2=sys.maxint)
g.add_edge(3,4,type1=sys.maxint,type2=1)
g.add_edge(1,3,type1=sys.maxint,type2=1)
print nx.shortest_path(g,1,4,weight='type1')
print nx.shortest_path(g,1,4,weight='type2')
  

结果:

[1, 2, 4]
[1, 3, 4]

此外,找到附加创建的图表,以便更容易可视化。enter image description here