如何在Java中叠加2D数组?

时间:2019-02-17 16:38:20

标签: java arrays

我的任务是在包含阻止数字的2D数组的最左列到最右列之间建立路径。路径必须由“块”组成,这些块仅在一个块中接触,并且不重叠。这些块是正常的俄罗斯方块块:水平3个块,垂直3个块,转角和反射角。它们无法旋转。

2d数组是通过用户输入创建的,我将数组格式化为包含0和1的序列,其中0表示“开放”区域,而1表示无法通过的区域,“阻塞”地区。

我的问题是:如何将“块”数组与原始大数组叠加以创建路径?我用谷歌搜索“二维数组叠加java”,但没有提出太多,所以也许是不可能的。如果不是,是否还有其他解决方案?

例如:array是:

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

我们将角码放置在(0,0)。现在这些单元格被阻塞,我们有了数组:

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

现在是垂直片段:

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

现在反射的角落:

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

然后我们输出序列:“角/垂直/反射角”。

1 个答案:

答案 0 :(得分:0)

您应该能够使用一种简单的方法来检查该块是否与板上的填充空间重叠。在伪代码中,其中x和y是插入坐标:

field[][]
block[][]

isBlockBlocked(x,y){
    for each (a,b) in block {
        if( field[x+a][y+b] == 1 && block[a][b] == 1 ){
            return False;
        }
    }
    return True;
}

祝您工作顺利。