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