package DynamicProgramming;import java.util.LinkedList;import java.util.Queue;import java.util.Vector;public class FordFulkerson {final static int INF = 987654321;// edgesstatic int V;static int[][] capacity, flow;public static void main(String[] args) {System.out.println("V : 6");V = 6;capacity = new int[V][V];capacity[0][1] = 12;capacity[0][3] = 13;capacity[1][2] = 10;capacity[2][3] = 13;capacity[2][4] = 3;capacity[2][5] = 15;capacity[3][2] = 7;capacity[3][4] = 15;capacity[4][5] = 17;System.out.println("Max capacity in networkFlow : " + networkFlow(0, 5));}private static int networkFlow(int source, int sink) {flow = new int[V][V];int totalFlow = 0;while (true) {Vector<Integer> parent = new Vector<>(V);for (int i = 0; i < V; i++)parent.add(-1);Queue<Integer> q = new LinkedList<>();parent.set(source, source);q.add(source);while (!q.isEmpty() && parent.get(sink) == -1) {int here = q.peek();q.poll();for (int there = 0; there < V; ++there)if (capacity[here][there] - flow[here][there] > 0 && parent.get(there) == -1) {q.add(there);parent.set(there, here);}}if (parent.get(sink) == -1)break;int amount = INF;String printer = "path : ";StringBuilder sb = new StringBuilder();for (int p = sink; p != source; p = parent.get(p)) {amount = Math.min(capacity[parent.get(p)][p] - flow[parent.get(p)][p], amount);sb.append(p + "-");}sb.append(source);for (int p = sink; p != source; p = parent.get(p)) {flow[parent.get(p)][p] += amount;flow[p][parent.get(p)] -= amount;}totalFlow += amount;printer += sb.reverse() + " / max flow : " + totalFlow;System.out.println(printer);}return totalFlow;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。