我有一个2d矩阵( x / y - 矩阵),如下所示:
var matrix=[
'111111',
'100001',
'101101',
'100001',
'111111'
]
我想从任意点开始找到所有连接的'1'字符(1)并将连接位置的结果推送到数组。
用例如(X:2,Y:2)调用我的函数将返回我在下面用'2'字符标记的位置:
var matrix=[
'111111',
'100001',
'102201',
'100001',
'111111'
]
使用例如(X:4,Y:4)调用我的函数将返回此标记为'2'的坐标:
var matrix=[
'222222',
'200002',
'201102',
'200002',
'222222'
]
所以我已经编写了一些代码,但似乎并没有这样做。我绝对不确定这是否是最有效的解决方案。所以我希望有人喜欢分享一些与我的问题相匹配的代码,感谢提前一百万,
- 乔纳斯
Array.prototype.extract_specific_components_positions = function(x_position, y_position, selector) {
var matrix = this.map(str => Array.from(str, Number)),
result_array = []
function test_connection(array, i, j, value, callback) {
try {
if (array[i][j].toString() == selector) {
result_array.push([j, i]);
array[i][j] = value;
test_connection(array, i - 1, j, value, callback);
test_connection(array, i + 1, j, value, callback);
test_connection(array, i, j - 1, value, callback);
test_connection(array, i, j + 1, value, callback);
}
else {
callback(j, i)
}
}
catch (e) {
callback(j, i)
}
}
matrix.forEach(function(a, i, aa) {
a.forEach(function(b, j, bb) {
if (i == y_position && j == x_position) {
status = true
}
if (!status) return false
test_connection(aa, i, j, 2, function(j, i) {
status = false;
})
})
})
matrix = matrix.map(a => [a.join('')]).concat.apply([], matrix.map(a => [a.join('')]));
return [matrix, result_array]
}
var matrix=[
'111111',
'100001',
'101101',
'100001',
'111111'
]
var result = matrix.extract_specific_components_positions(0,0,'1')
console.log(result[0].join('\n'))
console.log(result[1])