Floyd-Warshall负循环重建

时间:2019-02-10 14:00:27

标签: floyd-warshall cycle-detection

我根据Wikipedia page实现了Floyd-Warshall算法。我想在以下测试图中检测到负周期:

A  -1  B
 ↖       
2   -1   -1
        ↖
D  -1  C

所有边缘的权重为-1,除非D -> A

运行路径重建

procedure Path(u, v)
   if next[u][v] = null then
       return []
   path = [u]
   while u ≠ v
       u ← next[u][v]
       path.append(u)
   return path

导致无休止的循环,因为到D的路径是不返回到D的循环。这是我的next的内容:

B -> A = C
C -> A = A
D -> A = A
A -> B = B
C -> B = A
D -> B = A
A -> C = B
B -> C = C
D -> C = A
A -> D = B
B -> D = C
C -> D = A

例如,从CD的路径为C -> A -> B -> C -> A -> B ...,因此将永远不会到达D,并且Path中的while循环也不会退出。

我的问题是这是否是预期的行为,并且在运行路径重建时必须检查一些内容。我已经仔细检查了我的实现,在Wikipedia上找不到参考实现之间的任何差异。

0 个答案:

没有答案