This question already has answers here:
Find all paths between two graph nodes

(11个答案)


7年前关闭。




让我们以该图为例:

现在让我们说我从顶点3开始,想要找到顶点7。
深度优先搜索(取决于实现方式)将首先查看子级。现在,在我们的示例中,出于争论的考虑,我从顶点2开始,然后转到顶点4,然后顶点2返回顶点,然后转到顶点7,问题已解决。

我想要的是:我想获得所有可能的路径,这些路径将从x到y(例如3到7:3,1,4,7-3,5,7-3,4,7- 3,5,6,9,7)。我没有从深度优先搜索中得到的信息。

您建议的算法是什么?

谢谢!

最佳答案

您应该使用修改后的BFS算法(http://en.wikipedia.org/wiki/Breadth-first_search)。在每个顶点上,您应该保存邻居列表,这些邻居导致该顶点(前身),而不是只有一个邻居导致该顶点。

当您要从中查找所有路径时,您只需在端节点上开始,并在每个顶点处分支路径即可,该路径具有多个前任,并遵循每个顶点中前任所创建的方式,直到您开始使用您拥有的所有分支。

编辑:
您可以使用DSF算法而不是BFS并以相同的方式对其进行修改。

10-06 13:52