关键路径算法算法:
一、先顺着找,求每个顶点的最早发生时间ve(j)=Max{ve(i) + dut(<i,j>)}
1、v1到它的后继结点分别为:
v1->v2 = 6
v1->v3 = 4
v1->v4 = 5
则有表:
{v1:0,v2:6,v3:4,v4:5}
2、然后看v5
v2->v5=v1->v2->v5=7
v3->v5=v1->v3->v5=5
取大路径则有表:
{v1:0,v2:6,v3:4,v4:5,v5:7}
3、然后看v6
v4->v6=v1->v4->v6=7
则有表:
{v1:0,v2:6,v3:4,v4:5,v5:7,v6:7}
4、然后看v7
v5->v7=7+9=16
{v1:0,v2:6,v3:4,v4:5,v5:7,v6:7,v7:16}
5、然后看v8
v5->v8=14
v6->v8=11
则有表:
{v1:0,v2:6,v3:4,v4:5,v5:7,v6:7,v7:16,v8:14}
6、然后看v9
v7->v9=18
v8->v9=18
则有表:
{v1:0,v2:6,v3:4,v4:5,v5:7,v6:7,v7:16,v8:14,v9:18}
二、倒着找,找顶点的最晚发生时间vl(i)=Min{vl(j) - dut(<i,j>)}
1、v9=18
则有表{v9:18}
2、看v7 v8
v7=v9->v7=16
v8=v9->v8=14
则有表{v9:18,v8:14,v7:16}
3、看v5
v5=v7->v5=7
v5=v8->v5=7
则有表{v9:18,v8:14,v7:16,v5:7}
4、看v6
v6=v9->v8->v6=10
则有表{v9:18,v8:14,v7:16,v5:7,v6:10}
5、看v4
v4=v6->v4
则有表{v9:18,v8:14,v7:16,v5:7,v6:10,v4:8}
6、看v3
v3=v5->v3=6
则有表{v9:18,v8:14,v7:16,v5:7,v6:10,v4:8,v3:6}
7、看v2
v2=v5->v2=6
则有表{v9:18,v8:14,v7:16,v5:7,v6:10,v4:8,v3:6,v2:6}
8、看v1
v1=v2->v1=0
v1=v3->v1=2
v1=v4->v1=3
则有表{v9:18,v8:14,v7:16,v5:7,v6:10,v4:8,v3:6,v2:6,v1:0}
三、求一和二相等的元素就是关键路径中的定点集合
表一(ve):{v1:0,v2:6,v3:4,v4:5,v5:7,v6:7,v7:16,v8:14,v9:18}
表二(vl):{v9:18,v8:14,v7:16,v5:7,v6:10,v4:8,v3:6,v2:6,v1:0}
={v1,v2,v5,v7,v8,v9}
也就是说v1->v2->v5->v7->v9和v1->v2->v5->v8->v9都是关键路径
四、求关键活动
关键路径上的边都是关键活动,但是这里还是要列个表说明下,求关键活动的理论求法,即通过活动的最早和最晚发生时间,最早和最晚发生时间相等的就是关键活动。
e(i)表示弧<j,k>
e(i) = ve(j)
l(i) = vl(k) - dut(<j,k>)
e(i) l(i)
a1 0 6-6=0
a2 0 6-4=2
a3 0 8-5=3
a4 6 7-1=6
a5 4 7-1=6
a6 5 10-2=8
a7 7 16-9=7
a8 7 14-7=7
a9 7 14-4=10
a10 16 18-2=16
a11 14 18-4=14
可以找到e(i)等于l(i)的关键活动,分别为 a11 a10 a8 a7 a4 a1