Python 带标记边图的最短路径 问题

Python 带标记边图的最短路径 问题,python,graph,networkx,graph-algorithm,shortest-path,Python,Graph,Networkx,Graph Algorithm,Shortest Path,假设我有一个带有标记节点和边的图,见图。我的目标是得到a和D之间所有最短路径的集合 到目前为止我所拥有的 在最短路径中,我得到['A','B','D']。当然,这是通过节点表示的最短路径,但我需要的是: 1在我的图形中添加边标签 2找到所有可能的最短路径集。理想情况下,在最短路径中,我希望有如下输出: [A->A->B,B->B->D],[A->A->B,B->c->D] 问题 1使用networkx是否可以做到这一点 2如果不是,还有哪些图形库包含的函数可以解决此类场景中的问题而不必是Pyth

假设我有一个带有标记节点和边的图,见图。我的目标是得到a和D之间所有最短路径的集合

到目前为止我所拥有的 在最短路径中,我得到['A','B','D']。当然,这是通过节点表示的最短路径,但我需要的是:

1在我的图形中添加边标签

2找到所有可能的最短路径集。理想情况下,在最短路径中,我希望有如下输出: [A->A->B,B->B->D],[A->A->B,B->c->D]

问题 1使用networkx是否可以做到这一点


2如果不是,还有哪些图形库包含的函数可以解决此类场景中的问题而不必是Python?

您可以将边转换为节点,并使用函数all\u shortest\u path:


对于重复边,您需要改用nx.MultiGraph。网络不支持边的任意属性G.add_edgeA,B,name=c。要获得自定义格式的输出,您必须自己编写一些代码。对于你的儿科病例来说,它不应该超过半个小时。
import networkx as nx

G = nx.Graph()
G.add_edge('A', 'B')
G.add_edge('B', 'D')
G.add_edge('B', 'C')

shortest_path = nx.shortest_path(G, 'A', 'D')
import networkx as nx

G = nx.MultiGraph()
G.add_edge('A', 'B', label='a')
G.add_edge('B', 'D', label='b')
G.add_edge('B', 'D', label='c')
G.add_edge('B', 'C', label='d')
G.add_edge('C', 'D', label='e')

# Convert edges to nodes
g = nx.Graph()
for i, j, label in G.edges(data='label'):
    g.add_edge(i, label)
    g.add_edge(j, label)

print(list(nx.all_shortest_paths(g, 'A', 'D')))
# [['A', 'a', 'B', 'b', 'D'], ['A', 'a', 'B', 'c', 'D']]