我正在使用递归DFS来检索无向和未加权图形中两个节点之间的所有路径。它在保存路径时递归地获取节点及其相邻节点上的起始和结束节点以及DFS。 我想知道是否有更有效的方法来查找所有路径?
答案 0 :(得分:3)
有一些指数的简单路径,而DFS基本上是创建所有这些路径0所以你的方法是正确的,虽然很耗时(但这是问题本身的一部分,而不是算法)。
如果存在这样的节点,你可以通过消除不通向目标的图形节点来优化它 - 在计算它们之前有效地修剪不成功的搜索。
请注意,如果图形包含循环 - 可能存在无限数量的路径(尽管有限数量的简单路径)。请注意,为了避免无限循环并获得所有简单路径,您的DFS将需要维护一个visited
集合,该集合按路径修改(一旦“发现”一个节点插入它设置,并且一旦从中弹出堆栈,将其从集合中移除。)
答案 1 :(得分:1)
您可以调整Dijkstra的算法,另请参阅A Recursive Algorithm to Find all Paths Between Two Given Nodes