我在思考如何在有向图中寻找负权重环的算法。问题是:我们有一个图G(V,E),我们需要找到一种有效的算法来查找具有负权重的环。我理解了这份PDF文件中的算法。
简要地说,该算法是通过迭代|V|-1次进行松弛来应用Bellman Ford算法。之后,它检查是否存在可以进一步松弛的边,如果存在负权重环,我们可以通过父指针将其追溯回去,然后一切顺利,我们找到了负权重环。
然而,我想到了另一种算法,只需在图上使用深度优先搜索(DFS),并跟踪您遍历的距离总和即可。一开始将所有节点标记为白色,当我搜索路径时,将它们标记为灰色,并在完成时将它们标记为黑色,这样我就知道,如果找到一个已访问的节点,并且它是灰色的(在我的路径上),而不是黑色(已经由深度优先搜索完成),则表示我找到了一个环。对于我的算法,如果我到达一个已经被访问过的灰色节点,我会检查它的更新值(新距离),如果比之前低,那么我就知道有一个负权重环并可以追溯回去。
我的算法是否有错?如果有,你能找到反例吗?如果没有,你能帮我证明吗?
谢谢。
简要地说,该算法是通过迭代|V|-1次进行松弛来应用Bellman Ford算法。之后,它检查是否存在可以进一步松弛的边,如果存在负权重环,我们可以通过父指针将其追溯回去,然后一切顺利,我们找到了负权重环。
然而,我想到了另一种算法,只需在图上使用深度优先搜索(DFS),并跟踪您遍历的距离总和即可。一开始将所有节点标记为白色,当我搜索路径时,将它们标记为灰色,并在完成时将它们标记为黑色,这样我就知道,如果找到一个已访问的节点,并且它是灰色的(在我的路径上),而不是黑色(已经由深度优先搜索完成),则表示我找到了一个环。对于我的算法,如果我到达一个已经被访问过的灰色节点,我会检查它的更新值(新距离),如果比之前低,那么我就知道有一个负权重环并可以追溯回去。
我的算法是否有错?如果有,你能找到反例吗?如果没有,你能帮我证明吗?
谢谢。