Computer >> Máy Tính >  >> Lập trình >> Javascript

Khoảng cách của 0 gần nhất trong ma trận nhị phân trong JavaScript

Ma trận nhị phân là một mảng các mảng chỉ chứa 0 hoặc 1. Chúng tôi được yêu cầu viết một hàm JavaScript lấy ma trận nhị phân làm đối số duy nhất.

Hàm của chúng ta phải tạo một ma trận mới chứa cùng số hàng và số cột, và đối với mỗi phần tử của ma trận ban đầu, ma trận kết quả phải chứa khoảng cách gần nhất của phần tử đó với 0 trong ma trận ban đầu.

Chúng ta phải ghi nhớ rằng trong khi tính toán khoảng cách, nó có thể di chuyển theo chiều ngang hoặc chiều dọc chứ không phải theo đường chéo. Và nó được đảm bảo rằng ma trận chứa ít nhất một 0.

Ví dụ -

Nếu ma trận đầu vào là -

const arr = [
   [0, 0, 0]
   [0, 1, 0]
   [1, 1, 1]
];

Khi đó, ma trận đầu ra phải là -

const output = [
   [0, 0, 0]
   [0, 1, 0]
   [1, 2, 1]
];

Ví dụ

Mã cho điều này sẽ là -

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));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

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