Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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算法:我无法正确实现Relax函数_Python_Algorithm_Graph_Bellman Ford - Fatal编程技术网

Python Bellman-Ford算法:我无法正确实现Relax函数

Python Bellman-Ford算法:我无法正确实现Relax函数,python,algorithm,graph,bellman-ford,Python,Algorithm,Graph,Bellman Ford,我正在实施贝尔曼-福特算法。我正在测试的图形是CLRS:。 以下是我的图形初始化: def connect_nodes_directed(图形、源、目标、权重=1): 图形[源]。追加((目标,权重)) 节点数=5 图=[]用于范围内的u(num_节点)] 连接节点(图,0,1,6) 连接节点(图,0,2,7) 连接节点(图1、2、8) 连接节点(图2、4、9) 连接节点(图,2,3,-3) 连接节点(图,4,0,2) 连接节点(图1,4,-4) 连接节点(图1、3、5) 连接节点(图,3,1,

我正在实施贝尔曼-福特算法。我正在测试的图形是CLRS:。
以下是我的图形初始化:

def connect_nodes_directed(图形、源、目标、权重=1):
图形[源]。追加((目标,权重))
节点数=5
图=[]用于范围内的u(num_节点)]
连接节点(图,0,1,6)
连接节点(图,0,2,7)
连接节点(图1、2、8)
连接节点(图2、4、9)
连接节点(图,2,3,-3)
连接节点(图,4,0,2)
连接节点(图1,4,-4)
连接节点(图1、3、5)
连接节点(图,3,1,-2)
连接节点(图4、3、7)
对于图中的i:
印刷品(一)
注:
s、t、y、x、z分别是
0、1、2、3、4

结果:

[(1,6)、(2,7)]
[(2, 8), (4, -4), (3, 5)]
[(4, 9), (3, -3)]
[(1, -2)]
[(0, 2), (3, 7)]
以下是我正在执行的代码,仅限
relax
函数:

def init_single_源(图形,源):
距离_至=[float(“inf”)]*len(图形)
到[源]的距离=0
返回距离
def relax(源、目标、权重、到的距离、父对象):
如果到[目的地]的距离>到[来源]的距离+权重:
到[目的地]的距离=到[来源]的距离+权重
父项[目的地]=源
def bellman_ford_sssp(图表,来源):
父项=[None]*len(图)
距离=初始单源(图形,源)
对于范围内的i(len(图)):
对于图[i]中的j:
放松(i,j[0],j[1],到父母的距离)#j[0]是目的地,j[1]是重量
打印(到的距离)

输入是
(图形,0)
,结果是:
[0,2,7,4,2]
,应该是
[0,2,7,4,-2]
。我想不出哪一部分我做错了。有人能发现吗?非常感谢。

我对python不太了解。但是在C++中,添加一些到无限/最大值的值会产生溢出。在您的relax函数中,距离[source]可以是inf,如果python还没有处理它,那么添加一些权重可能会产生一些错误。我会这样写:-如果(距离u到[源]!=无穷大和距离u到[目的地]>距离u到[源]+权重)