假设我有这张非负条目表:
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
给定:
- 列数 C 和行数 R
- 两个总和条目(每行的总和和每列的总和)
- 和总数(本例中为 66)
目标是生成表格的条目(内部单元格;不是相同的单元格。但是,总和必须等于每行和每列的给定值)所有条目必须是正值。
任何伪代码来做到这一点?
假设我有这张非负条目表:
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
给定:
目标是生成表格的条目(内部单元格;不是相同的单元格。但是,总和必须等于每行和每列的给定值)所有条目必须是正值。
任何伪代码来做到这一点?
以您喜欢的任何顺序遍历表格单元格。在每一步都放两个总和约束仍然允许的最大数字。
例如,如果我们逐行进行:
10 0 0
7 18 0
0 4 13
0 0 14
试试我的伪代码。这条规则命名为“西北角规则”(我在 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;
创建一组线性方程,如;X+ Y + .. = 总和
对于每一行和每一列。并使用求解线性方程组的标准方法求解。