从特定点开始查找连接的组件(Javascript矩阵)

时间:2017-12-06 19:26:23

标签: javascript jquery arrays matrix components

我有一个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])

0 个答案:

没有答案