【发布时间】:2014-05-03 15:21:22
【问题描述】:
我有一个数组,它用数字填充,因此它包含空元素和非空元素,实际上由几个数组组成。它可能看起来像这样:
0 х х х 0 х х х 0 0 0 0 0 0
0 x х х х x х х 0 0 0 х х х
0 0 х х х х 0 х 0 0 0 х х х
0 х х 0 х х х х 0 0 х 0 х х
0 х х х 0 0 0 х 0 0 х х х 0
0 0 0 0 0 0 0 0 0 0 0 х х х
0 0 0 0 0 0 0 0 0 0 х х х х
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 xxxxx 0 0 0
0 0 0 0 0 xxxx 0 x 0 0 0
“0”表示空元素
“x”表示非空元素
一个人在这里很容易找到 3 个子数组,但我想知道如何使用程序找到它们。困难在于子数组不完整,即有空元素。
有没有将初始数组切割成子数组的算法,或者任何人都可以帮助我?
附言子数组的坐标 (x1,y1,x2,y2):{2,1,8,5} {11,2,14,7} {6,9,11,10}。也用粗体突出显示
【问题讨论】:
-
这个人也可以形成超过 3 个子阵列。我的意思是你如何将数组划分为子数组?子数组的数量和空元素的数量是否有相关的成本函数?
-
它们之间应该至少有一个空行(列)。未定义且应计算的子数组数量。输入只是一个主数组 m*n。可以计算主数组中的空元素和非空元素。换句话说,输入是一个巨大的数组,具有我上面显示的结构,输出是一个数组(n,x1,x2,y1,y2),其中 n 是索引,x1,x2,y1,y2 是坐标一个子数组。
-
对不起,输出应该是一个Array(n,1 to 4),其中n是子数组的索引,1到4是它的坐标x1,y1,x2,y2
-
问题还没有明确定义。 “它们之间至少有一个空行”是什么意思?一个完整的空行或列?而且,为什么不直接取整个矩阵呢?它还包含所有非零元素。优化目标是什么?最小面积?最大矩形数?