注意:这篇文章并没有为所发布的问题提供解决方案,但它确实提供了一些关于解决此类问题时可能犯的常见错误的信息。
(这篇文章还假设路径不允许重复顶点。如果删除此约束,则可以通过找到从 u 到 v 的路径和从 v 到 w 的路径并连接这两条路径来轻松解决问题从 u 到 w 通过 v。这可以通过从 u 和 v 运行一次 BFS 来实现)
阿米特给出的答案是不正确的。
编辑:
下面的反例不正确,请参阅史蒂夫的评论。在此之后,我提供了另一个反例。
考虑一个反例。
V = {u, v, w, x}
E = {{u,v}, {u,w}, {u,x}, {v,x}, {w,x}}
那么,路径(u ,v,x,w) 是有效路径。
现在假设我们在 w 上应用 BFS,我们从 w 到 u 和 w 到 v 的相应路径(不是唯一的)将是 (w,u) 和 (w, u, v)
现在,“路径” (v, u,w,u) 有一个重复的节点 u,所以它不是一条路径。
另一个反例:
考虑 V = {u,v,w,x,y,z} E = {{u,x}, {v,x}, {x,w}, {v,y}, {y, z}, {z,w}}
来自 w 的 BFS 树将具有边 {{w,x}, {w,z}, {x,u}, {x,v}}(我们将 u,v 视为sinks)
这给出了无效的“路径”{u,x,w,x,v}
马特的回答也是不正确的。
如果 u、v 和 w 在同一个连通分量中,则存在路径。
考虑一个折线图 {w, u, v},那么这 3 个都在同一个连通分量中,但是从 u 到 w 没有经过 v 的路径
这个问题(对于无向图)也在这里说明(见问题 7),我认为这是一个有信誉的来源,所以我们可以安全地假设确实存在一个有效的算法。
这也证明了解决方案的存在,并提供了一种算法。
对于有向图,这是一个“难题”。