Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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包实现了Bellman-Ford最短路径算法?_Python_Algorithm_Shortest Path_Bellman Ford - Fatal编程技术网

哪个python包实现了Bellman-Ford最短路径算法?

哪个python包实现了Bellman-Ford最短路径算法?,python,algorithm,shortest-path,bellman-ford,Python,Algorithm,Shortest Path,Bellman Ford,哪个python包实现了Bellman-Ford最短路径算法 给定一个起始节点i和一个具有负权重的邻接矩阵G,我想找到从i到另一个节点j的最短路径。例如,我的图表如下所示: import numpy G = numpy.array([[ 0. , 0.55, 1.22], [-0.54, 0. , 0.63], [-1.3 , -0.63, 0. ]]) 我只能找到一个对我的需求来说太浪费的实现,因为我的图很大

哪个python包实现了Bellman-Ford最短路径算法

给定一个起始节点i和一个具有负权重的邻接矩阵G,我想找到从i到另一个节点j的最短路径。例如,我的图表如下所示:

import numpy
G = numpy.array([[ 0.  ,  0.55,  1.22],
                 [-0.54,  0.  ,  0.63],
                 [-1.3 , -0.63,  0.  ]])
我只能找到一个对我的需求来说太浪费的实现,因为我的图很大,我只需要一对节点的最短路径。性能对我来说很重要,因为我会用它来绘制成千上万的图表

因此,我正在四处寻找贝尔曼-福特(Bellman-Ford)的实施方案——有人看到过吗?

我自己的

def bellmanFord(source, weights):
    '''
    This implementation takes in a graph and fills two arrays
    (distance and predecessor) with shortest-path (less cost/distance/metric) information

    https://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm
    '''
    n = weights.shape[0]

    # Step 1: initialize graph
    distance = np.empty(n)
    distance.fill(float('Inf'))      # At the beginning, all vertices have a weight of infinity
    predecessor = np.empty(n)
    predecessor.fill(float('NaN'))   # And a null predecessor

    distance[source] = 0             # Except for the Source, where the Weight is zero

    # Step 2: relax edges repeatedly
    for _ in xrange(1, n):
        for (u, v), w in np.ndenumerate(weights):
        if distance[u] + w < distance[v]:
        distance[v] = distance[u] + w
    predecessor[v] = u

    # Step 3: check for negative-weight cycles
    for (u, v), w in np.ndenumerate(weights):
        if distance[u] + w < distance[v]:
        raise ValueError("Graph contains a negative-weight cycle")

    return distance, predecessor
def bellmanFord(来源,重量):
'''
此实现接收一个图并填充两个数组
(距离和前身)具有最短路径(较少成本/距离/度量)信息
https://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm
'''
n=重量。形状[0]
#步骤1:初始化图形
距离=np.空(n)
distance.fill(float('Inf'))#开始时,所有顶点的权重均为无穷大
前置项=np.空(n)
preducer.fill(float('NaN'))#和空的preducer
距离[震源]=0#震源除外,其中权重为零
#步骤2:反复松弛边
对于x范围(1,n)内的uu:
对于(u,v),np中的w。单位重量(重量):
如果距离[u]+w<距离[v]:
距离[v]=距离[u]+w
前置[v]=u
#步骤3:检查负重量循环
对于(u,v),np中的w。单位重量(重量):
如果距离[u]+w<距离[v]:
提升值错误(“图表包含负权重循环”)
返回距离

这是离题的(因为它要求提供非现场库或软件工具)。Google搜索“Bellman Ford Python”的点击率很高,包括几个完整的实现(例如)。为什么不从那里开始呢?很好(+1)。我上面给出的链接提供了一个快速矢量化版本。比较两者会很有趣。@JohnColeman谢谢,但矢量化版本只返回最佳成本,而不是路径。每次迭代后,前置信息都会在内部丢失。