如何在二维数组中找到点的对角线



我有一个这样的2D阵列:

const matrix = [
[0, 0, 0, 0],
[0, 2, 1, 0],
[0, 1, 2, 0],
[0, 0, 0, 0]
]

如果给定了一个单元格的xy,例如21(matrix[2][1]1(,我如何找到穿过所提供单元格的所有对角线(两个数组,每个数组都包含对角线中每个单元格的点,顺序正确(?矩阵(数组(将始终是对称和正方形的(确切地说,我有一个8x8的网格(。

示例:

const matrix = [
[0, 0, 0, 0],
[0, 2, 1, 0],
[0, 1, 2, 0],
[0, 0, 0, 0]
];
const cellX = 2, cellY = 1;
// Code ...
const diagonalFromTopLeft = [0, 1, 0];
const diagonalFromTopRight = [0, 1, 1, 0]

如果你能找到每一条线,而不仅仅是对角线(垂直和水平,但我自己能算出(,那就有加分了。

您可以迭代行(和相应的索引(,并计算两条对角线上相应的x坐标。当它们在范围内时,可以将相应的值添加到相关数组:

function diagonals(matrix, cellX, cellY) {
let forward = []; // diagonal according forward slash shape: / 
let backward = []; // diagonal according backslash shape: 
let n = matrix.length;
matrix.forEach((row, y) => {
let x = cellX - (cellY - y);
if (x >= 0 && x < n) backward.push(row[x]);
x = cellX + (cellY - y);
if (x >= 0 && x < n) forward.push(row[x]); 
});
return [forward, backward];
}

const matrix = [
[0, 0, 0, 0],
[0, 2, 1, 0],
[0, 1, 2, 0],
[0, 0, 0, 0]
];
const cellX = 2, cellY = 1;
console.log(diagonals(matrix, cellX, cellY));

最新更新