【发布时间】:2017-01-07 03:12:07
【问题描述】:
我正在为 Coursera 上的“图算法”课程做一个练习,我必须实现 Bellman-Ford 算法来检测图是否有负循环,分别输出 1 和 0。我做了很多压力测试,我的实现工作正常,但是在课程中的一个测试用例中失败了(但除了“错误答案”之外,他们没有提供任何关于它的信息)。我的实现与您在网上找到的相同,因此我看不出我的代码有什么问题。有什么想法吗?
def relax(u,v,w,dist,prev):
if dist[u]+w < dist[v]:
dist[v] = dist[u]+w
prev[v] = u
def bellmanFord(V,E):
dist = [float('inf')] * V
prev = [None] * V
dist[0] = 0
for i in range(V-1):
for edge in E:
relax(edge[0],edge[1],edge[2],dist,prev)
#checks for negative cycles
for e in E:
u = e[0]
v = e[1]
w = e[2]
if dist[u]+w < dist[v]:
return 1
return 0
【问题讨论】:
-
他们不测试空图,是吗?
-
或者不是强连接的图?
-
输入的权重是浮点数还是整数?是否保证图是连通的?
-
所有图都是有向图,权重为整数,最多 10³,N 条边在 1 和 10³ 之间,M 条边在 0 和 10⁴ 之间。这些图没有强连接。当有 1 个或多个顶点且没有边,或者存在循环时(如果顶点与自身连接并且具有负权重,则程序检测到负循环),此代码有效。任何具有正权重的图都被检测为没有负循环。正在发生的事情是,一些具有负权重的图表被视为负循环,或者在应该被视为负循环时,但我找不到错误的测试用例。
-
交叉发布:stackoverflow.com/q/41517416/781723,cs.stackexchange.com/q/68357/755。请do not post the same question on multiple sites。每个社区都应该诚实地回答问题,而不会浪费任何人的时间。
标签: python algorithm graph shortest-path