我有一个“节点”网络,每个节点都会产生“结果”。每个节点和结果都有一个唯一的名称/ID。结果用作每个节点的输入和输出。当一个节点的所有输入结果都可用时,它可以被执行。当节点完成执行时,其输出结果将可用。
例如:
input node output
A x
x B y,z
x,z C q
在上述网络中。节点 A 没有输入,可以先执行。然后 B 可以在结果 x 可用时执行。当 A 和 B 都完成时,C 可以执行,因为它取决于 A 和 B 的结果。结果也可以是最终产品,如本例中的 y,它不用作任何节点的输入。
网络可能要复杂得多。每个节点可以产生多个结果,并且它可以具有多个输入依赖项。
我希望能够选择一个结果,比如“q”并找出需要执行哪些节点才能到达那里。我想在更大的节点网络中为多个结果执行此操作。
我觉得这是一个常见的算法,但我没有这方面的经验。它不像树一样分层,因为依赖关系可以创建圆圈。从我读过的内容来看,我认为它一定是一种森林图。
无论如何,它必须是可遍历的。总是至少有一个节点可以首先执行,并且所有其他节点应该能够按照某种顺序执行,而不会造成两个节点相互等待完成的死锁。
用代码描述这个网络/它的节点的常用方法是什么,这种网络的正式名称是什么?