如图,求图中关键路径长度和经过的节点

首先源点 1 的事件最早发生时间为 0,然后按照拓扑排序的顺序,对于每一个节点 i,它的事件最早发生时间 D(i) = max{D(pre) + weight(pre, i)},即对于节点 i 的每个前驱节点 pre,计算 pre 的事件最早发生时间 + 有向边 <pre, i> 的权,取其中的最大值,即为节点 i 的事件最早发生时间,对应的 pre 即为节点 i 在关键路径中的前驱,如果有多个相等的前驱,那说明图中有多条关键路径。计算到终点后,沿着记录的前驱就能逆向写出所有关键路径。
对于上图,求解过程如下:
| 节点 | 事件最早发生时间 | 前驱 |
|---|---|---|
| 1 | 0 | |
| 2 | 5 | 1 |
| 3 | 6 | 1 |
| 4 | 9 | 3 |
| 5 | 12 | 3 / 4 |
| 6 | 16 | 5 |
| 7 | 14 | 5 |
| 8 | 13 | 4 |
| 9 | 19 | 7 |
| 10 | 21 | 9 |

逆向写出关键路径:
1 -> 3 -> 4 -> 5 -> 7 -> 9 -> 10
1 -> 3 -> 5 -> 7 -> 9 -> 10