使用 Ford Fulkerson 确定足以求和的值的二分图中的最大流量

Max flow in bipartite graph using Ford Fulkerson to determine values to suffice to sum

我想弄清楚在这种情况下应该如何使用 Ford Fulkerson 算法 这种情况有点像数独。我们有一个包含整数值的矩阵 a。每行的最后一列和每列的最后一行,包含整行/列的总和。

示例:

int[][] a = {{1, 3, 5, 9},
             {4, 2, 1, 7},
             {5, 5, 6, *}} // * Is not determined since the sums 
                           // * do not count as summable values.

问题是,矩阵中的值并不总是正确的。总和的值并不总是正确的,例如:

int[][] a = {{1, 3, 3, 9},
             {2, 3, 1, 7},
             {5, 5, 6, *}} // * Is not determined since the sums do 
                           // * not count as summable values.

有一个矩阵 b,其中包含一个单元格可以满足给定总和的最大差异。例如

int[][] b = {{1, 0, 3},
             {2, 1, 2}}

例如a[0][0]的值为1,最大的差异是b[0][0]的值,也就是1,所以a[0][0]的值可以改变最大 0 或 2(以及介于两者之间的所有数字,但对于此示例,我们只有 2 个选项)。

我的问题是:给定一个矩阵 a(给定总和的值无效)和一个具有最大差值的矩阵 b 可以用来满足所需的总和,如何才能我确定给定的最大差异是否有可能,以及如何获得此类矩阵的有效结果(如果存在)。

我目前的方法(行不通):

我不知道应该如何使用我的算法结果来确定矩阵 a 的正确值以满足每行和每列的给定总和。

所以我自己找到了解决这个问题的方法:

如果您有值矩阵 A[i][j] 和差异矩阵 B[i][j],则必须为每个 I 减去 A - Bj。然后,您必须使用行作为左节点,列作为右节点来创建二分图。

然后您必须将每个行节点连接到列节点,反之亦然。还将源连接到所有行节点并将所有列节点连接到汇。

从源节点到行节点的每条边的容量是当前数字之和,列节点的边容量也是如此。

row-node和column-node之间的每个capacity都是当前的B[i][j] * 2,那么你应该有一个完整的网络。

使用福特富尔克森和埃德蒙兹卡普。每个行节点和列节点之间的流是应该加到当前A[i][j]的数字。

您得到的 A 矩阵将是您的答案。