Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ระยะทางของ 0 ที่ใกล้ที่สุดในเมทริกซ์ไบนารีใน JavaScript


เมทริกซ์ไบนารีเป็นอาร์เรย์ของอาร์เรย์ที่มีเพียง 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 ] ]