证明
令 s,v 最短路径上的点按 distance 递增排列。我们用数学归纳法证明。
当 di+1(s,v)=0 时,说明 s=v 两者是同一个点,因此在 fi 对应的图里,di(s,v)=0≤di+1(s,v).
考虑任意长度 L>0,假设引理对 ∀v,di+1(s,v)<L 成立,考察 ∀v,di+1(s,v)=L:
在 residual graph Gi+1 上找到 s,v 的最短路,令 x 为 v 的上一个节点,那么有 di+1(s,x)=L−1
所以根据假设 di(s,x)≤L−1,我们再根据这个信息,推理 di(s,v)。在 Gi 上有两种情况
-
Gi 中存在 (x,v) 这条边
这种情况下,我们只需要走 s→x→v,就一定可以保证 di(s,v)≤L,所以 di(s,v)≤di+1(s,v)
-
Gi 中不存在 (x,v) 这条边
如果 Gi 不存在这条边,但 Gi+1 存在这条边,这就说明
- (v,x)∈Gi
- EK 算法找到了一条增广路,s→v→x→t
此时,由于 EF 算法找到的总是最短路,而 di(s,x)≤L−1 且经过 (v,x),因此我们可以推导出
di(s,v)=di(s,x)−1≤L−2所以 di(s,v)≤di+1(s,v) 便自动成立了