Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

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 ] ]