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

Python 最短路径搜索-使用边类型[NetworkX,igraph],python,graph,igraph,networkx,shortest-path,Python,Graph,Igraph,Networkx,Shortest Path,我使用有向多重图作为数据结构(两个节点之间可能有多条边) 我想在多重有向图中指定不同类型的边。例如,边(u,v_1)可以是类型_1,另一条边(u,v_2)可以是类型2 构建此数据结构后,我希望找到最短路径,但路径必须仅包含特定类型的边(例如,类型1)。在NetworkX或python igraph库中是否可以?正如NetworkX中@Gabor Csardi所建议的那样,添加类型1的边:使用所需的值添加属性类型_1,并将属性类型_2添加到最大int(在最短路径计算中被忽略,就好像它不存在一样)。

我使用有向多重图作为数据结构(两个节点之间可能有多条边)

我想在多重有向图中指定不同类型的边。例如,边(u,v_1)可以是类型_1,另一条边(u,v_2)可以是类型2


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

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

下面的代码显示了一个简单的图形,以说明从1到4的最短路径在类型_1边中通过2变短,在类型_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')
结果是:


另外,找到所创建的图形,以便更容易地可视化。

在IGRAPHE中,根据类型设置边的权重。即,将所有类型1边缘权重设置为1,将所有其他边缘权重设置为无穷大。
[1, 2, 4]
[1, 3, 4]