查找所有关键路径的算法

时间:2010-12-18 14:13:19

标签: algorithm graph

我需要创建一个可以在图表中找到所有关键路径的算法。

我找到了节点的拓扑顺序,计算了每个节点的最早结束时间和最新开始时间。

此外,我找到了所有关键节点(即关键路径上的节点)。

问题在于将所有这些放在一起并实际打印出所有这些路径。如果图表中只有一条关键路径,那么我可以处理它,但是如果有多条路径则会出现问题。

例如,一个节点是几个关键路径的一部分,多个起始节点,多个终端节点等等。我还没有想出一个可以考虑所有这些因素的算法。

我正在寻找的输出是这样的(如果a,b,c等都是节点):

  • A-&GT,E
  • A-> C-> F-> I-> J => k
  • A-> C->克
  • 1→ë

如果有人可以编写一个算法的描述,可以通过了解关键节点,拓扑顺序等来找到路径,或者也可能使用C或Java代码,这将是很好的。

编辑: 这是一个例子,它应该提供我之前发布的输出。关键路径为红色,每个节点的值标记在其上方或附近。 Critical path

2 个答案:

答案 0 :(得分:1)

最近开始时间的计算几乎也提供了关键路径。您需要从终端节点构造结果,然后向后转:

  1. 查找具有最长最早结束时间的所有节点(t = 11,节点= {e,g,k})
  2. 对于每个人,找到具有本地最早的最早结束时间的所有前任。  对于e,l和k都具有t = 2,因此得到l-> e,a-> e。对于g,t = 6,这是针对节点c的,  所以你得到c-> g。对于k,t = 10,但只有j将其作为结束时间,因此得到j-> k。
  3. 重复,直到到达开始节点。 l-> e和a-> e已经是起始节点。  c-> g具有唯一的前身a,所以你得到a-> c-> g。 j-> k有t = 9,这是我的结束时间,  所以你得到i-> j-> k。

答案 1 :(得分:0)

我完全不明白你的问题:什么是关键路径?你可能会得到以下帮助: 用于计算Minimum Spanning TreeDijkstra's shortest path algorithm的算法 - 尽管您可能已经知道这些算法。