Python 从源节点查找DAG上的最长路径
我正在尝试从顶点0查找DAG的最长路径。在搜索Stackoverflow之后,我知道我可以反转边的权重,并使用Bellman-Ford算法来查找最长路径。然而,我并不完全理解这是如何工作的 然而,我的图没有权重(所有权重都相等),我想我应该设置为-1 我正在使用networkx和python来解决这个问题。这是我的行李员代码: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)
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处回答,这是图中的绝对值,我从一个特定的源节点看。