首页 > 解决方案 > 用 1 和 0 填充 n*n 数组

问题描述

因此,考虑到每行和列中的元素数量,我尝试用 1 和 0 填充数组。例如,如果我被给予

int 行 = {2, 2, 2, 3};

int 列 = { 3, 2, 1, 3};

那么一个可能的解决方案是
1 0 0 1
1 1 0 0
0 0 1 1
1 1 0 1

其次,是否存在任何组合,即使两个数组(列和行)的总和相等,也无法获得有效的解决方案。就我而言,它应该是有效的,因为 3+2+1+3=2+2+2+3 但是是否存在两个总和相等但仍然不存在稳定组合的情况。

标签: algorithmmultidimensional-arraynested-loops

解决方案


我找到的答案是一种贪婪的方法,其中回答每个子问题。所以我逐列并根据行的权重填写每一列。
记住索引从 0
开始我从第 0 列开始,
因为第 3 行具有最高值 (3) 我填充它

0 0 0 0  
0 0 0 0  
0 0 0 0  
1 0 0 0 

现在行列数组如下

row = {2,2,2,2}  
column = {2,2,1,3}  

我继续填充,直到我不能再插入更多,即 column[0]=0

1 0 0 0  
0 0 0 0  
0 0 0 0  
1 0 0 0  

row = {1,2,2,2}  
column={2,2,1,2} 



1 0 0 0  
1 0 0 0  
0 0 0 0  
1 0 0 0



row = {1,1,2,2}  
column={2,1,1,2}

现在因为 column[0]==0 我可以转到下一列并再次执行相同的过程


推荐阅读