在有向图中的两个顶点之间遍历尽可能多的边

问题描述

我想找到一组从开始节点到结束节点的路径,以便这些路径共同包含尽可能多的图边。

或者更准确地说:给定一个可能包含环的有向图和两个顶点 u 和 v,我想找到从 u 到 v 的路径的有限集 P,这样对于 u 和 v 之间的任何路径 q,不在 P 中,并且在 q 中的任何边 e,在 P 中存在包含 e 的路径 p。顶点 u 和 v 可能相同。

事实上,有人问了一个几乎相同的问题:Directed Graph Traversal - All paths,但这个非常合理的答案从未被接受或收到过赞成票,所以我想知道。 该答案涉及使用 Dijkstra 或 A* 的变体来遍历 u 和 v 之间按长度排序的所有路径。

Is there a well-studied optimization to find the shortest path traversing every weighted edge through a graph?看来,我的问题也几乎和“中国邮差问题”一模一样,只是我不需要访问所有的边缘,尽可能多,我不是对最短路径感兴趣,只是任何路径,而且我的边缘没有权重。

我正在考虑做第一个答案之类的事情。或者也许使用 KoSaraju 压缩图形,使用直接 Dijkstra 找到 u 和 v 之间的所有路径,并通过找到强连通分量中的所有循环来扩展“压缩”顶点。但我真的一无所获。

遵循的最佳计划是什么?

解决方法

在这种情况下,包含尽可能多边的路径集合小于所有不同路径的集合。

enter image description here

因此,如果您使用算法来查找所有路径,那么您将需要一个额外的步骤来丢弃没有添加更多边的路径。