问题描述
我正在实现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 (将#修改为@)