Python:NetworkX查找包含给定节点列表的最短路径

Python:NetworkX查找包含给定节点列表的最短路径,python,graph,networkx,Python,Graph,Networkx,我有一张图表 G=nx.Graph() 及其边缘 G.add_edge('a', 'b') G.add_edge('a', 'e') G.add_edge('b', 'c') G.add_edge('c', 'd') G.add_edge('d', 'e') G.add_edge('e', 'g') G.add_edge('g', 'f') G.add_edge('g', 'h') G.add_edge('g', 'k') G.add_edge('h', 'j') G.add_edge('h'

我有一张图表

G=nx.Graph()
及其边缘

G.add_edge('a', 'b')
G.add_edge('a', 'e')
G.add_edge('b', 'c')
G.add_edge('c', 'd')
G.add_edge('d', 'e')
G.add_edge('e', 'g')
G.add_edge('g', 'f')
G.add_edge('g', 'h')
G.add_edge('g', 'k')
G.add_edge('h', 'j')
G.add_edge('h', 'i')
现在假设我想得到一条最短路径,它从节点“a”开始,应该包含节点
['d','k']
所以输出应该是
['a','b','c','d','e','g','k']
有一个networkx函数可以给我这样的输出吗?

您可以使用它来获取所有最短路径,然后通过验证它是子列表还是否来比较哪些路径包含
['d','k']

pathList= [p for p in nx.shortest_path(G,source='a')] #Target not specified 
l=['d', 'k']
def isSubList(G,l):
    return all(True if x in G else False for x in l )

res= [x for x in pathList if  isSubList(x,l)]

我不知道有哪个库函数只返回包含多个节点的最短路径

如果查看开始节点和结束节点之间的每一条路径在计算上不太昂贵,我会将返回路径列表过滤为仅包含我正在查找的节点的路径

#用于检查路径列表是否包含某些节点的lambda
仅包含_节点的_=λx:d在x中,k在x中
#如果要查找包含这些节点的最短路径,请执行以下操作:
#将获取所有路径,然后可以按进行筛选和排序
#他们的长度。
所有简单路径=nx。所有简单路径(G,source='a',target='k')
#如果只需要包含两个节点的最短路径,即使
#路径包括节点,并且不是最短的。
所有最短路径=nx。所有最短路径(G,source='a',target='k'))
过滤器(仅\u包含\u节点,所有\u简单\u路径)
#>>>[['a',b',c',d',e',g',k']]
过滤器(仅\u包含\u节点、所有\u最短路径)
# >>> []

我希望这能有所帮助。

我得到TypeError:all_shortest_path()至少需要3个参数(给定2个)。所有最短路径()函数都需要目标。真!尝试@shortest_路径