我试图从顶点0找到DAG的最长路径。在Stackoverflow上搜索后,我理解我可以反转边缘的权重并使用Bellman Ford算法找到最长的路径。但是,我并不完全了解这是如何运作的。
我的图表没有加权(都相等),我假设我应该设置为-1?
我正在使用networkx和python来解决这个问题。这是我的贝尔曼代码:
def Bellman(G):
pred, dist = nx.bellman_ford(G, 0, weight='-1')
print(dist)
无论我设定什么重量,我仍然从0开始获得每个节点的最低距离。我哪里出错?
答案 0 :(得分:2)
根据networkx documentation,bellamn_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'
之类的“自定义”属性。