নিম্নলিখিত ব্যাকট্রেসিং সমস্যাটি বিবেচনা করুন:একটি 2-মাত্রিক গ্রিডে, 4 ধরনের বর্গ রয়েছে -
-
1 প্রারম্ভিক বর্গ প্রতিনিধিত্ব করে। ঠিক একটি শুরু বর্গক্ষেত্র আছে৷
৷ -
2 শেষ বর্গক্ষেত্রের প্রতিনিধিত্ব করে। ঠিক একটি শেষ বর্গক্ষেত্র আছে।
-
0 খালি বর্গক্ষেত্রগুলিকে প্রতিনিধিত্ব করে যা আমরা হাঁটতে পারি৷
-
−1 এমন প্রতিবন্ধকতার প্রতিনিধিত্ব করে যেগুলো আমরা অতিক্রম করতে পারি না।
আমাদের এমন একটি ফাংশন লিখতে হবে যা প্রারম্ভিক বর্গ থেকে শেষ বর্গ পর্যন্ত 4−দিকনির্দেশক পদচারণার সংখ্যা ফেরত দেয়, যেটি প্রতিটি অ-অবাধা বর্গক্ষেত্রের উপর দিয়ে ঠিক একবার হাঁটে।
উদাহরণ
const arr = [
[1,0,0,0],
[0,0,0,0],
[0,0,2,-1]
];
const uniquePaths = (arr, count = 0) => {
const dy = [1,−1,0,0], dx = [0,0,1,−1];
const m = arr.length, n = arr[0].length;
const totalZeroes = arr.map(row => row.filter(num => num ===
0).length).reduce((totalZeroes,nextRowZeroes) => totalZeroes +
nextRowZeroes, 0);
const depthFirstSearch = (i, j, covered) => {
if (arr[i][j] === 2){
if (covered === totalZeroes + 1) count++;
return;
};
for (let k = 0; k < 4; k++)
if (i+dy[k] >= 0 && i+dy[k] < m && j+dx[k] >= 0 && j+dx[k] < n
&& arr[i+dy[k]][j+dx[k]] !== −1 ){
arr[i][j] = −1;
depthFirstSearch(i+dy[k],j+dx[k],covered+1);
arr[i][j] = 0;
}
return;
};
for (let row = 0; row < m; row++)
for (let col = 0; col < n; col++)
if (arr[row][col] === 1){
arr[row][col] = −1;
depthFirstSearch(row,col,0);
break;
}
return count;
};
console.log(uniquePaths(arr)); ব্যাখ্যা
-
আমরা গ্রিড অতিক্রম করার সময় চারটি দিকনির্দেশক পুনরাবৃত্তির সুবিধার্থে ভেরিয়েবল সেট আপ করি, পুনরাবৃত্তের বেস কন্ডিশনে পৌঁছে গেলে কভারেজ চেক করার জন্য ম্যাট্রিক্সে শূন্য গণনা করি
-
তারপরে আমরা DFS (ডেপথ ফার্স্ট সার্চ) ব্যাকট্র্যাক ফাংশন সেট আপ করি সক্রিয় পাথে −1 দিয়ে গ্রিড চিহ্নিত করতে এবং ফিনিশ সেল পৌঁছে গেলে পাথের দৈর্ঘ্য পরীক্ষা করতে
-
এবং সবশেষে, আমরা সমস্ত সম্পূর্ণ পথ গণনা করতে এবং গণনা ফেরত দিতে স্টার্ট সেল থেকে DFS চালু করি
আউটপুট
এবং কনসোলে আউটপুট হবে −
2