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

时间:2015-10-15 08:22:49

标签: 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开始获得每个节点的最低距离。我哪里出错?

1 个答案:

答案 0 :(得分:2)

根据networkx documentationbellamn_ford的权重参数是包含权重的边缘属性的关键字。我想通过将其设置为不存在的边缘属性'-1',它不会考虑任何权重。要完成这项工作,您需要做的是为所有边创建一个设置为-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')

请注意,您可以将默认属性'myWeight'设置为-1,然后调用Bellman-Ford而不必显式指定权重参数,而不是使用'weight'之类的“自定义”属性。