Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从源节点查找DAG上的最长路径_Python_Graph Algorithm_Networkx - Fatal编程技术网

Python 从源节点查找DAG上的最长路径

Python 从源节点查找DAG上的最长路径,python,graph-algorithm,networkx,Python,Graph Algorithm,Networkx,我正在尝试从顶点0查找DAG的最长路径。在搜索Stackoverflow之后,我知道我可以反转边的权重,并使用Bellman-Ford算法来查找最长路径。然而,我并不完全理解这是如何工作的 然而,我的图没有权重(所有权重都相等),我想我应该设置为-1 我正在使用networkx和python来解决这个问题。这是我的行李员代码: def Bellman(G): pred, dist = nx.bellman_ford(G, 0, weight='-1') print(dist)

我正在尝试从顶点0查找DAG的最长路径。在搜索Stackoverflow之后,我知道我可以反转边的权重,并使用Bellman-Ford算法来查找最长路径。然而,我并不完全理解这是如何工作的

然而,我的图没有权重(所有权重都相等),我想我应该设置为-1

我正在使用networkx和python来解决这个问题。这是我的行李员代码:

def Bellman(G):
    pred, dist = nx.bellman_ford(G, 0, weight='-1')
    print(dist)
无论我设置了什么权重,我仍然从0获得每个节点的最小距离。哪里出错了?

根据,bellamn_ford的权重参数是包含权重的边属性的键。我想通过将它设置为不存在的边缘属性<代码> -1’< /COD>,它不考虑任何权重。要执行此操作,您必须为所有边创建一个设置为
-1
的边属性:

for n in G:
  for nbr in G[n]:
    G[n][nbr]['myWeight'] = -1
然后使用此属性作为权重调用Bellman Ford:

pred, dist = nx.bellman_ford(G, 0, weight='myWeight')

请注意,您也可以将默认属性
'weight'
设置为-1,然后调用Bellman Ford,而无需明确指定weight参数,而无需使用“自定义”属性,如
'myWeight'

只是一个澄清:要么执行G[n][nbr]['weight']而不是“myWeight”,这样您就可以调用nx.bellman_ford(G,0),而无需指定weight参数,因为默认情况下它是“weight”。或者你必须打电话如下:nx.bellman_ford(G,0,weight='myWeight'])@AbdallahSobehy谢谢你指出这一点。我已经在回答中包含了这一澄清。@matz和我必须再次反转结果,以获得每个节点的实际长度是吗?@ForeverLearning是--
bellman_ford
返回的
dist
包含沿路径求和的权重,在这种情况下是负数,所以在@Aric处回答,这是图中的绝对值,我从一个特定的源节点看。