Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में जंप गेम III


मान लीजिए हमारे पास नॉन-नेगेटिव इंटीजर्स का एक ऐरे arr है, हम ऐरे के स्टार्ट इंडेक्स पर प्रारंभिक रूप से स्थित हैं। जब हम इंडेक्स i पर मौजूद होते हैं, तो हम i + arr[i] या i - arr[i] पर जंप कर सकते हैं, जांचें कि क्या हम मान 0 वाले किसी इंडेक्स तक पहुंच सकते हैं। हमें ध्यान रखना होगा कि हम किसी भी समय ऐरे के बाहर जंप नहीं कर सकते। यदि इनपुट इस प्रकार है: arr = [4,2,3,0,3,1,2] और स्टार्ट 5 से है, तो आउटपुट true होगा, जैसे मूव 5 → 4 → 1 → 3, या 5 → 6 → 4 → 1 → 3।

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे -

  • n := arr का आकार
  • एक क्यू q परिभाषित करें, स्टार्ट को q में डालें, visited नामक एक सेट परिभाषित करें, और स्टार्ट को visited सेट में डालें
  • जब तक क्यू खाली नहीं है,
    • curr := q का फ्रंट एलिमेंट, q से फ्रंट एलिमेंट डिलीट करें
    • यदि array[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. - C++ में स्टोन गेम III

    समस्या विवरण मान लीजिए अमल और बिमल पत्थरों के ढेर के साथ खेल रहे हैं। कई पत्थर एक पंक्ति में व्यवस्थित हैं, और प्रत्येक पत्थर का एक संबद्ध मान है जो stoneValue नामक सरणी में दी गई संख्या है। अमल और बिमल बारी-बारी से खेलते हैं, अमल पहले शुरू करता है। प्रत्येक खिलाड़ी की बारी पर, वह पंक्ति में पहले श

  1. C++ में जंप गेम IV C++ में जंप गेम IV

    मान लीजिए हमारे पास arr नामक पूर्णांकों की एक सरणी है। हम प्रारंभ में इंडेक्स 0 पर हैं। एक चरण में हम इंडेक्स i से i + x पर कूद सकते हैं जहां: i + x = 0, j जहां: arr[i] और arr[j] समान हैं और i और j समान नहीं हैं। यहां n सरणी का आकार है। हमें सरणी के अंतिम इंडेक्स तक पहुंचने के लिए न्यूनतम चरणों की स

  1. C++ में जंप गेम V C++ में जंप गेम V

    मान लीजिए हमारे पास arr नामक पूर्णांकों की एक सरणी और एक पूर्णांक d है। एक चरण में हम इंडेक्स i से कूद सकते हैं: i + x जहां: i + x < n और x की सीमा 1 से d है। = 0 और x की सीमा 1 से d है। arr[k] हो। हम सरणी के किसी भी इंडेक्स से कूदना शुरू कर सकते हैं। हमें अधिकतम इंडेक्स की संख्या ज्ञात करनी है ज