কম্পিউটার টিউটোরিয়াল

C++-এ জাম্প গেম III


মনে করুন একটি নন-নেগেটিভ পূর্ণসংখ্যার অ্যারে `arr` আছে, আমরা প্রাথমিকভাবে অ্যারেতে `start` ইন্ডেক্সে অবস্থিত। যখন আমরা ইন্ডেক্স `i`-তে থাকি, আমরা `i + arr[i]` বা `i - arr[i]`-এ জাম্প করতে পারি, চেক করতে হবে কি আমরা ০ মানযুক্ত যেকোনো ইন্ডেক্সে পৌঁছাতে পারি। মনে রাখতে হবে যে আমরা যেকোনো সময় অ্যারের বাইরে জাম্প করতে পারব না। যদি ইনপুট হয়: `arr = [4,2,3,0,3,1,2]` এবং `start = 5`, তবে আউটপুট হবে `true`, কারণ 5 → 4 → 1 → 3, অথবা 5 → 6 → 4 → 1 → 3 পথে যেতে পারি।

এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব -

  • `n` := `arr`-এর আকার
  • একটি কিউ `q` সংজ্ঞায়িত করুন, `start`-কে `q`-তে ইনসার্ট করুন, একটি সেট `visited` সংজ্ঞায়িত করুন, এবং `start`-কে `visited`-এ ইনসার্ট করুন
  • যদি কিউ খালি না থাকে,
    • `curr := q`-এর ফ্রন্ট এলিমেন্ট, `q`-এর ফ্রন্ট এলিমেন্ট ডিলিট করুন
    • যদি `arr[curr]` 0 হয়, তবে `true` রিটার্ন করুন
    • যদি `curr + arr[curr] < n` এবং `curr + arr[curr]` `visited` সেটে না থাকে, তবে
      • `curr + arr[curr]`-কে `q`-তে ইনসার্ট করুন
      • `curr + arr[curr]`-কে `visited`-এ ইনসার্ট করুন
    • যদি `curr - arr[curr] >= 0` এবং `curr - arr[curr]` `visited` সেটে না থাকে, তবে
      • `curr - arr[curr]`-কে `q`-তে ইনসার্ট করুন
      • `curr - arr[curr]`-কে `visited`-এ ইনসার্ট করুন
  • `false` রিটার্ন করুন

উদাহরণ

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন -

#include <bits/stdc++.h> using namespace std; class Solution { public:    bool canReach(vector<int>& arr, int start) {       int n = arr.size();       queue <int> q;       q.push(start);       set <int> visited;       visited.insert(start);       while(!q.empty()){          int curr = q.front();          q.pop();          if(arr[curr] == 0)return true;          if(curr + arr[curr] < n && !visited.count(curr + arr[curr])){             q.push(curr + arr[curr]);             visited.insert(curr + arr[curr]);          }          if(curr - arr[curr] >= 0 && !visited.count(curr - arr[curr])){             q.push(curr - arr[curr]);             visited.insert(curr - arr[curr]);          }       }       return false;    } }; main(){    vector<int> v = {4,2,3,0,3,1,2};    Solution ob;    cout << (ob.canReach(v, 5)); }

ইনপুট

[4,2,3,0,3,1,2] 5

আউটপুট

1

  1. সি++-এ বেসিক ক্যালকুলেটর III

  2. C++-এ স্টোন গেম III (Stone Game III)

  3. C++-এ জাম্প গেম IV (Jump Game IV)

  4. C++-এ জাম্প গেম V (Jump Game V)