想一想如何将 Network Flow 应用到这个问题上。应该是从螃蟹的头到脚的流动。到达头部的流量应该有一个相当于英尺数的值,并且从螃蟹头到脚的每个边缘应该有一个容量。
我们怎样才能做到这一点?自己做这件事肯定很难,但我希望在多次看到这个例子后你能掌握这个窍门。
我们必须创建一个复制原始顶点的新图。一组可以让每个顶点都有机会成为头部,而另一组可以充当脚。记住这一点,精确的算法可以写成如下:-
1. We create a new graph where original vertices are duplicated (vertex i becomes 2*i (head set) and 2*i+1 (feet set) ).
2.For i and j vertices connected in original graph make sure that 2*i and 2*j+1 plus 2*j and 2*i+1 gets connected in new graph with capacity 1.
3.source vertex (S) is connected to each 2*i vertex(head set) with capacity min(T, degree).
4. Each 2*i+1(feet set) vertex is connected to target vertex (T) with capacity 1
5. Maxflow is the answer.
下图可以很好地了解图形的形成方式。
新图形成
第 3 点的解释:- 头显中的每个顶点都应与容量为 min(t, degree) 的源连接,因为如果我们希望该边缘处的最大流量与 T 一样大,不超过因为因为螃蟹不能超过 t 英尺,并且这里的容量值也受 0 所连接的顶点度数的限制。一个头的脚不能超过它的度数。
第4点的解释:-为了确保对是不相交的,以便每个顶点只出现在一个螃蟹中,每只脚都以容量1连接到图中的目标10。
如果需要,我可以发布代码。