贝尔曼卡拉巴算法解释

时间:2014-03-30 10:26:08

标签: graph-algorithm

Belman-Ford与此之间有区别吗?

有人可以解释如何实现这一点,以找到给定节点之间的最长路径? 我知道算法计算两个节点之间的最短路径,所以如果有人可以解释如何实现,我可以弄清楚如何修改它以给我最长的路径。

1 个答案:

答案 0 :(得分:1)

我正在回答这个问题,万一其他人将来会有同样的问题。

我发现了一个python实现(遗憾的是它没有记录,我仍然在试图完全理解它)。

这计算一个给定节点与图中所有其他节点之间的最短路径。

from json.encoder import INFINITY
def BellmanKalaba(v,x,m):
    L=list()
    iteration=list()
    for j in range(len(v)):
        iteration.append(v[x][j])
    L.append(iteration)
    k=0
    while True:
        iteration=[0 for i in range(len(v))]
        for j in range(len(v)):
            minim=INFINITY
            for i in range(1,len(v)):
                a=L[len(L)-1][i]+v[i][j]
                if a < min:
                    minim=a
            iteration[j]=minim
        k+=1
        L.append(iteration)
        if iteration==L[len(L)-1]:
            return L
        if k==m:
            return 0 

v是表示加权图的矩阵, x是起始节点, m是边数。

现在,这有点怪异,因为L实际上会包含2个列表,所以从x到y的最短路径将是min(L[0][y], L[1][y]). 我无法准确解释它是如何工作的。 此外,这不适用于任何给定的图表。

这是一个开始,也许现在有人可以跳进去帮忙。