JavaScript中二进制矩阵中最近0的距离

二元矩阵是一个只包含 0 或 1 的数组。我们需要编写一个 JavaScript 函数,它接受一个二元矩阵作为唯一的参数。

我们的函数应该创建一个包含相同行数和列数的新矩阵,并且对于原始矩阵的每个元素,结果矩阵应该包含该元素与原始矩阵中距离 0 的最近距离。

我们必须记住,在计算距离时,它可以水平或垂直移动,而不是对角移动。并且保证矩阵至少包含一个 0。

例如 -

如果输入矩阵是 -

const arr = [

   [0, 0, 0]

   [0, 1, 0]

   [1, 1, 1]

];

那么输出矩阵应该是 -

const output = [

   [0, 0, 0]

   [0, 1, 0]

   [1, 2, 1]

];

示例

此代码将是 -

const arr = [

   [0, 0, 0],

   [0, 1, 0],

   [1, 1, 1],

];

const findNearestDistance = (arr = []) => {

   let array = [];

   let res = arr.map((el, ind) => el.map((subEl, subInd) => {

      if (subEl === 0) {

         array.push([ind, subInd])

         return 0

      };

      return Number.MAX_SAFE_INTEGER;

   }));

   const updateAdjacent = (ind, subInd, min, array = []) => {

      if (ind < 0 || subInd < 0 || ind ==arr.length|| subInd == arr[0].length){

         return;

      };

      if (res[ind][subInd] < min + 2) return

         res[ind][subInd] = min + 1

         array.push([ind, subInd])

   };

   while (array.length) {

      let next = []

      for (let [ind, subInd] of array) {

         updateAdjacent(ind, subInd + 1, res[ind][subInd], next)

         updateAdjacent(ind, subInd - 1, res[ind][subInd], next)

         updateAdjacent(ind + 1, subInd, res[ind][subInd], next)

         updateAdjacent(ind - 1, subInd, res[ind][subInd], next)

      };

      array = next;

   }

   return res;

};

console.log(findNearestDistance(arr));

输出结果

控制台中的输出将是 -

[ [ 0, 0, 0 ], [ 0, 1, 0 ], [ 1, 2, 1 ] ]

以上是 JavaScript中二进制矩阵中最近0的距离 的全部内容, 来源链接: utcz.com/z/361658.html

回到顶部