【发布时间】:2020-03-10 08:53:52
【问题描述】:
我需要通过元素的位置在二维数组中找到邻居
可用数据:
网格大小。例如 - 3*3 将返回 3,4*4 将返回 4
网格中填充单元格的数量。例如 - 4
获取填充单元格的 x 坐标 - 例如 0 或 1 或 2 等
获取填充单元格的 y 坐标 - 例如 0 或 1 或 2 等
例如
int[][] room = {
{0, 0, X},
{0, X, 0},
{X, 0, 0}
};
这里,网格大小 = 3
网格中填充单元格的数量 = 3(因为有三个“X”,所以它在其他单元格上的值无关紧要)
获取填充单元格的 x 坐标 - 第一个元素为 0,第二个元素为 1,第三个元素为 2
获取填充单元格的 y 坐标 - 第一个元素为 2,第二个元素为 1,第三个元素为 0
所以,坐标变成(0,2),(1,1),(2,0)
我需要计算至少有一个相邻“X”的“X”的数量。如果“X”在基本方向上彼此相邻,而不是对角线,则将它们视为邻居。 所以上面的情况会返回 0。
int[][] room = {
{X, X, 0},
{0, 0, 0},
{0, 0, 0}
};
这应该返回 2。
我使用的语言是 Java。
我尝试迭代填充元素的数量并使用如下所示的邻居逻辑,但在某些情况下它会中断 你上方的邻居 = (x, y-1),
你下面的邻居 = (x, y+1),
你左边的邻居 = (x-1, y),
你右边的邻居 = (x+1, y)
for (int x = 0; x < nums; x++) {
int xcord = xmap.get(x); //return x cord
int ycord = ymap.get(x); //return y cord
int xcordLeft = x - 1 >= 0 ? xmap.get(x - 1) : 0;
int ycordLeft = x - 1 >= 0 ? ymap.get(x - 1) : 0;
int xcordRight = x + 1 < size ? xmap.getOrDefault(x + 1, 0) : 0;
int ycordRight = x + 1 < size ? ymap.getOrDefault(x + 1, 0) : 0;
int xcordTop = xcord - 1 >= 0 ? xmap.get(xcord - 1) : 0;
int ycordTop = ymap.get(ycord);
int ycordBottom = ymap.get(ycord);*/
//left
if (xcord >= 0 && x - 1 >= 0 && xcord == xcordLeft && ycord - 1 == ycordLeft) {
neighbours++;
}
//right
if (xcord >= 0 && x + 1 < size && xcord == xcordRight && ycord + 1 == ycordRight) {
neighbours++;
}
//top
if (xcord >= 0 && xcord - 1 >= 0 && xcord - 1 == xcordTop && ycord == ycordTop) {
neighbours++;
}
//bottom
}
【问题讨论】:
标签: java arrays algorithm data-structures