0

假设我有这张非负条目表:

    1   2   3   sum
1   4   5   1   10
2   6   12  7   25
3   0   3   14  17
4   7   2   5   14
sum 17  22  27  66

给定:

  1. 列数 C 和行数 R
  2. 两个总和条目(每行的总和和每列的总和)
  3. 和总数(本例中为 66)

目标是生成表格的条目(内部单元格;不是相同的单元格。但是,总和必须等于每行和每列的给定值)所有条目必须是正值。

任何伪代码来做到这一点?

4

3 回答 3

3

以您喜欢的任何顺序遍历表格单元格。在每一步都放两个总和约束仍然允许的最大数字。

例如,如果我们逐行进行:

10  0  0
 7 18  0
 0  4 13
 0  0 14
于 2013-01-16T06:50:52.727 回答
2

试试我的伪代码。这条规则命名为“西北角规则”(我在 wiki 上找不到这条规则的真实名称)

row = 1
col = 1

while (col <= C && row <= R)
  Matrix[col, row] = Min(colsum[col], rowsum[row])
  colsum[col] = colsum[col] - Matrix[col, row]
  rowsum[row] = rowsum[row] - Matrix[col, row]
  while (col <= C && colsum[col] == 0) col++
  while (row <= R && rowsum[row] == 0) row++

Print Matrix;
于 2013-01-16T09:14:18.090 回答
1

创建一组线性方程,如;X+ Y + .. = 总和

对于每一行和每一列。并使用求解线性方程组的标准方法求解。

于 2013-01-16T06:41:55.747 回答