从源点出发,按拓扑排序,求出所有事件
v
k
v_k
vk的最早发生时间
v
e
(
k
)
ve(k)
ve(k).
v
e
(
k
)
ve(k)
ve(k)为从
v
1
v_1
v1到顶点
v
k
v_k
vk的最长路径长度,决定了所有从
v
k
v_k
vk开始的活动能够开工的最早时间
v
e
(
源
点
)
=
0
ve(源点)=0
ve(源点)=0
v
e
(
k
)
=
M
a
x
{
v
e
(
j
)
+
W
e
i
g
h
t
(
v
j
,
v
k
)
}
ve(k)=Max\{ve(j)+Weight(v_j,v_k)\}
ve(k)=Max{ve(j)+Weight(vj,vk)},其中
v
k
v_k
vk为
v
j
v_j
vj的任意后继,
W
e
i
g
h
t
(
v
j
,
v
k
)
Weight(v_j,v_k)
Weight(vj,vk)表示
<
v
j
,
v
k
>
<v_j,v_k>
<vj,vk>上的权值
从汇点出发,按逆拓扑排序,求出所有事件
v
k
v_k
vk的最迟发生时间
v
l
(
k
)
vl(k)
vl(k).
v
l
(
k
)
vl(k)
vl(k)表示在不推迟整个工程完成的前提下,即保证它的后继事件
v
j
v_j
vj在其最迟发生时间
v
l
(
j
)
vl(j)
vl(j)能够发生时,该事件最迟必须发生的时间。
v
l
(
汇
点
)
=
v
e
(
汇
点
)
vl(汇点)=ve(汇点)
vl(汇点)=ve(汇点)
v
l
(
k
)
=
M
i
n
{
v
l
(
j
)
−
W
e
i
g
h
t
(
v
k
,
v
j
)
}
vl(k)=Min\{vl(j)-Weight(v_k,v_j)\}
vl(k)=Min{vl(j)−Weight(vk,vj)},其中
v
k
v_k
vk为
v
j
v_j
vj的任意前驱
根据
v
e
(
i
)
ve(i)
ve(i)的值,求出活动
a
i
a_i
ai的最早开始时间
e
(
i
)
e(i)
e(i).
e
(
i
)
e(i)
e(i)是指该活动的起点所表示的事件的最早发生时间,若边
<
v
k
,
v
j
>
<v_k,v_j>
<vk,vj>表示活动
a
i
a_i
ai,则有
e
(
i
)
=
v
e
(
k
)
e(i)=ve(k)
e(i)=ve(k)
根据
v
l
(
i
)
vl(i)
vl(i)的值,求出活动
a
i
a_i
ai的最迟开始时间
l
(
i
)
l(i)
l(i).
l
(
i
)
l(i)
l(i)是指该活动的终点所表示的时间的最迟发生时间与该活动所需时间之差,若边
<
v
k
,
v
j
>
<v_k,v_j>
<vk,vj>表示活动
a
i
a_i
ai,则有
l
(
i
)
=
v
l
(
j
)
−
W
e
i
g
h
t
(
v
k
,
v
j
)
l(i)=vl(j)-Weight(v_k,v_j)
l(i)=vl(j)−Weight(vk,vj)
计算一个所有活动
a
i
a_i
ai的最迟开始时间
l
(
i
)
l(i)
l(i)和最早开始时间
e
(
i
)
e(i)
e(i)的差额
d
(
i
)
=
l
(
i
)
−
e
(
i
)
d(i)=l(i)-e(i)
d(i)=l(i)−e(i)
第5步计算的差额即为该活动完成的时间余量,即在不增加完成整个工程所需总时间的情况下,活动
a
i
a_i
ai可以拖延的时间。所以
d
(
i
)
d(i)
d(i)为0的活动
a
i
a_i
ai是关键活动