目的
最近在思考研究方向,在关注网络流问题,解决困扰几个月的一个问题,之前一直没有理解的就是Ford-Fulkerson算法中添加反向边后,为什么可以将反向边当作普通边使用,背后的原理是什么?
讲解
提示:本文中图片来自ShusenWang[bilibili]
如上图所示,通过
s
→
v
1
→
v
4
→
t
s \rightarrow v_1 \rightarrow v_4 \rightarrow t
s→v1→v4→t走了3的流量,添加了如图所示的绿色虚线,这里的核心是这三条虚线边是没有前向关联性
的,意思是:如果
v
1
→
v
4
v_1 \rightarrow v_4
v1→v4的全部或部分流量该走
v
1
→
v
3
v_1 \rightarrow v_3
v1→v3,将不会影响
s
→
v
1
s \rightarrow v_1
s→v1的流量,但是会影响
v
4
→
t
v_4 \rightarrow t
v4→t,因为这部分的流量必须要有别的地方补上。
下一步在右图中继续找路。
通过
v
4
→
v
1
v_4 \rightarrow v_1
v4→v1走了1的流量,这说明撤回了原来从
v
1
→
v
4
v_1 \rightarrow v_4
v1→v4的量为1的流量。
宏观上的效果
原先 s → v 1 → v 4 → t s \rightarrow v_1 \rightarrow v_4 \rightarrow t s→v1→v4→t中 v 1 → v 4 v_1 \rightarrow v_4 v1→v4的量为1的流量改走 v 1 → v 3 → t v_1 \rightarrow v_3 \rightarrow t v1→v3→t,这对 s → v 1 s \rightarrow v_1 s→v1没有影响,但是对 v 4 → t v_4 \rightarrow t v4→t有影响,必须要有其他地方补充上流入 v 4 v_4 v4的1的流量,这部分流量正好就是我们现在找到的这条路径 s → v 2 → v 4 → v 1 → v 3 → t s \rightarrow v_2 \rightarrow v_4 \rightarrow v_1 \rightarrow v_3 \rightarrow t s→v2→v4→v1→v3→t中的 s → v 2 → v 4 s \rightarrow v_2 \rightarrow v_4 s→v2→v4的量为1的流量。