我使用Directed MultiGraph作为数据结构(两个节点之间可能有多个边缘)。
我想在MultiDiGraph中分配不同类型的边。例如,edge(u,v_1)可以是type_1,另一个edge(u,v_2)可以是type.2。
构建此数据结构后,我想找到最短路径,但路径必须只包含特定类型的边(例如,类型1)。是否可以在NetworkX或python-igraph库中使用?
答案 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]