如何解决Python Bellman-Ford算法:我无法正确实现Relax函数
我正在实现Bellman-Ford算法。我正在测试的图形在CLRS中:Graph。
这是我的图形初始化:
def connect_nodes_directed(graph,source,destination,weights=1):
graph[source].append((destination,weights))
num_nodes = 5
graph = [[] for _ in range(num_nodes)]
connect_nodes_directed(graph,1,6)
connect_nodes_directed(graph,2,7)
connect_nodes_directed(graph,8)
connect_nodes_directed(graph,4,9)
connect_nodes_directed(graph,3,-3)
connect_nodes_directed(graph,2)
connect_nodes_directed(graph,-4)
connect_nodes_directed(graph,5)
connect_nodes_directed(graph,-2)
connect_nodes_directed(graph,7)
for i in graph:
print(i)
注意:s,t,y,x,z
分别是0,4
。
结果:
[(1,6),(2,7)]
[(2,8),(4,-4),(3,5)]
[(4,9),-3)]
[(1,-2)]
[(0,2),7)]
这是我正在实现的代码,仅适用于relax
函数:
def init_single_source(graph,source):
distance_to = [float("inf")] * len(graph)
distance_to[source] = 0
return distance_to
def relax(source,weights,distance_to,parents):
if distance_to[destination] > distance_to[source] + weights:
distance_to[destination] = distance_to[source] + weights
parents[destination] = source
def bellman_ford_sssp(graph,source):
parents = [None] * len(graph)
distance_to = init_single_source(graph,source)
for i in range(len(graph)):
for j in graph[i]:
relax(i,j[0],j[1],parents) # j[0] is destination,j[1] is weights
print(distance_to)
输入为(graph,0)
,结果为:[0,7,2]
,应改为[0,-2]
。我无法弄清楚我做错了什么。谁能发现它?非常感谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。