我有一个场景,箭头左侧的每个项目都是源项目,右侧是依赖项目。评估来源的方法我需要首先评估依赖项目。
我想创建一个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
答案 0 :(得分:0)
使用BFS遍历图表。将节点添加到新图形。从任何开始。 (虽然这个解决方案不是递归的,但它有效)
示例,您的案例:
使用节点A启动图表。
G(A)
G(A-> B)//现在寻找B的依赖
G(A-> B-> D)//现在是D'等等
G(A-> B-> D- I标记)
G(A-> B-> D-> I,B-> E)
G(A-> B-> D-> I,B-> E-> J)
G(A-> B-> D-> I,B-> E-> J,E-> K,E-> L
G(A-> B-> D-> I,B-> E-> J,E-> K,E-> L,B-> F)
G(A-> B-> D-> I,B-> E-> J,E-> K,E-> L,B-> F, A-&℃)
G(A-> B-> D-> I,B-> E-> J,E-> K,E-> L,B-> F, A-> C-> G-> H)---现在这将是你的最终图表。
现在你的结束图,在这种情况下是一张图。它可能是一组断开连接的组件。对于现在的每个组件,你可以做DFS,它会给你答案。
例如在此图中,对于(根)节点A
,所有叶子都将是其依赖关系。对于B
,我们有(F,I,J,K and L)
等。