基于递归依赖创建林

时间:2016-02-02 12:57:26

标签: java algorithm recursion graph-algorithm

我有一个场景,箭头左侧的每个项目都是源项目,右侧是依赖项目。评估来源的方法我需要首先评估依赖项目。

我想创建一个Source到依赖项的地图,并为每个父项确定叶子。当依赖项不依赖于它意味着它是叶子的任何东西时,需要从单个输入(A -> B , C)开始构建依赖关系。我如何递归地构建它?任何指针都会有所帮助。

Source -> Dependencies
A -> B , C
B -> D , E , F
C -> G , H 
D->I
E-> J , K , L
F -> null
G -> null
H -> null
I -> null
J -> null
K -> null
L -> null

1 个答案:

答案 0 :(得分:0)

使用BFS遍历图表。将节点添加到新图形。从任何开始。 (虽然这个解决方案不是递归的,但它有效)

示例,您的案例:

使用节点A启动图表。

  1. G(A)

  2. G(A-> B)//现在寻找B的依赖

  3. G(A-> B-> D)//现在是D'等等

  4. G(A-> B-> D- I标记)

  5. G(A-> B-> D-> I,B-> E)

  6. G(A-> B-> D-> I,B-> E-> J)

  7. G(A-> B-> D-> I,B-> E-> J,E-> K,E-> L

  8. G(A-> B-> D-> I,B-> E-> J,E-> K,E-> L,B-> F)

  9. G(A-> B-> D-> I,B-> E-> J,E-> K,E-> L,B-> F, A-&℃)

  10. G(A-> B-> D-> I,B-> E-> J,E-> K,E-> L,B-> F, A-> C-> G-> H)---现在这将是你的最终图表。

  11. 现在你的结束图,在这种情况下是一张图。它可能是一组断开连接的组件。对于现在的每个组件,你可以做DFS,它会给你答案。

    例如在此图中,对于(根)节点A,所有叶子都将是其依赖关系。对于B,我们有(F,I,J,K and L)等。