我试图弄清楚在这种情况下我应该如何使用福特富尔克森算法这种情况有点像数独。我们有一个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]
可以将 at 的值更改为最大 0 或 2(以及介于两者之间的所有数字,但对于此示例,我们只有2 个选项)。
我的问题是:给定一个矩阵a
(给定总和的值无效)和一个b
具有最大差异的矩阵,可用于满足所需的总和,我如何确定在给定的最大差异下是否有可能,我该怎么做得到这样一个矩阵的有效结果(如果存在的话)。
我目前的方法(不起作用):
- 制作行和列的二分图,因此每行和列都有一个源、一个接收器和一个节点。
- 然后将每一行连接到每一列。
- 然后将源连接到每一行。
- 然后将每列连接到水槽。
- 将从源到每个行节点的边的容量设置为 Math.Abs(当前数字总和
a
- 给定数字总和a
(对于该行))。 - 从每个列节点到接收器的边缘相同(但这次是列总和)。
- 将行到列的节点之间的容量相应地设置
b
为每个单元格的给定最大差异。 - 使用 Ford Fulkerson 确定最大流量。
我不知道我应该如何使用我的算法结果来确定矩阵的正确值a
以满足每一行和每一列的给定总和。