在定向标记图中查找两个节点之间的所有可能路径

时间:2012-12-13 03:29:30

标签: java algorithm graph-algorithm

  

可能重复:
  Find the paths between two given nodes?

给定有向图,如何在两个节点之间找到所有可能的路径并返回这些路径。

如果不是Java,请向我推荐算法。我搜索过,我发现使用的是BFS或DFS,但我无法看到哪种情况更好。如何跟踪所有路径,而不仅仅是最短路径。

例如,给出以下图表:

1 - > 2

1 - > 3

2 - > 3

3 - > 4

对于节点1和4之间的路径,输出应为:

第一条路径:1 - > 2 - > 3 - > 4

第二路径:1 - > 3 - > 4

1 个答案:

答案 0 :(得分:2)

对我来说,向后遍历要容易得多。算法步骤如下:

  1. 从目的地开始(例如在您的示例中为4)作为起点。
  2. 收集具有第二个元素作为目的地的所有节点,例如(3,4)。
  3. 假设起点(第一次迭代中3)作为新目的地,并重复步骤1& 2直到没有匹配的节点可用。 良好的递归方案。您的收藏品为:[(1,2),(2,3),(3,4)],[(1,3),(3,4) )]
  4. 检查上面创建的集合,如果反向目标与您的源相同,则保留它,否则丢弃(在您的情况下,没有什么可以丢弃)。 你已经完成了。