![](/img/trans.png)
[英]Find all paths from source to destination in a weighted cyclic directed graph
[英]Find all cyclic paths in a directed graph
标题是不言自明的。 这是我在互联网上找到的一个解决方案,可以帮助做到这一点。 这是链接
我不明白为什么不访问权重低于给定阈值的顶点会解决问题。
另外,我不知道如何使用/不使用它来解决这个问题。
让我们将其限制为简单循环 - 那些不包含子循环的循环。 对于图中的每个节点,开始对该节点进行深度优先搜索。 记录导致匹配的递归树的每个分支。 搜索时,永远不要跨越分支中已经遍历过的节点。
考虑在 n 个顶点上的完整有向图。 有 n(n-1) 条弧和 n! 长度为 n 的简单循环。 上面的算法根本没有比这差多少。 至少在最坏的情况下,简单地构建答案的新副本将花费几乎与运行上述算法一样多的时间。
如果您想在有向(甚至无向)图中找到循环,有一种直观的方法可以做到:
For each edge (u, v) in the graph
1. Temporarily ignore the edge (u, v) in step 2
2. Run an algorithm to find all paths from v to u (using a backtrackig algorithm)
3. Output the computed paths in step 2 along with the edge (u, v) as cycles in the graph
请注意,您将通过这种方式获得重复的循环,因为将找到 k 次长度为 k 的循环。
您也可以利用这个想法来查找具有特定属性的循环。 例如,如果您的目标是在图中找到最短的加权循环,而不是找到所有循环。 您可以在步骤 2 中使用 Dijkstra,并在您找到的所有循环中取最小值。 如果您想找到具有最少边数的循环,您可以在步骤 2 中使用 BFS。
如果您在查找图中的所有路径方面更加挣扎,这个问题可能对您有所帮助。 虽然这是一个稍微不同的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.