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

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

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

यदि इनपुट है -

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

तो आउटपुट 3 होगा, हमें इंडेक्स 0 से 4 से 3 से 9 तक तीन कूद की आवश्यकता है।

हल करने के चरण

  • एक मानचित्र m परिभाषित करें

  • n := arr का आकार

  • प्रत्येक इंडेक्स i के लिए, i को m[arr[i]] के अंत में डालें

  • visited सेट में 0 डालें, कतार q परिभाषित करें

  • स्तर दर स्तर BFS करें: वर्तमान नोड के लिए, यदि यह n-1 है तो स्तर लौटाएं

  • i-1, i+1 और समान मान वाले सभी इंडेक्स पर जाएं यदि वे visited में नहीं हैं

  • समान मान वाले इंडेक्स की सूची को m से मिटा दें ताकि दोबारा विज़िट न हो

  • यदि कतार खाली हो जाए तो -1 लौटाएं

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

class Solution { 
public: 
    int minJumps(vector<int>& arr) { 
        map<int, vector<int> > m; 
        int n = arr.size(); 
        for (int i = 0; i < n; i++) { 
            m[arr[i]].push_back(i); 
        } 
        set<int> visited; 
        visited.insert(0); 
        queue<int> q; 
        q.push(0); 
        for (int lvl = 0; !q.empty(); lvl++) { 
            int sz = q.size(); 
            while (sz--) { 
                int curr = q.front(); 
                q.pop(); 
                if (curr == n - 1) return lvl; 
                int i = curr; 
                if (i - 1 >= 0 && !visited.count(i - 1)) { 
                    q.push(i - 1); 
                    visited.insert(i - 1); 
                } 
                if (i + 1 < n && !visited.count(i + 1)) { 
                    q.push(i + 1); 
                    visited.insert(i + 1); 
                } 
                for (int j = 0; j < m[arr[curr]].size(); j++) { 
                    if (!visited.count(m[arr[curr]][j])) { 
                        q.push(m[arr[curr]][j]); 
                        visited.insert(m[arr[curr]][j]); 
                    } 
                } 
                if (m.count(arr[curr])) { 
                    m.erase(arr[curr]); 
                } 
            } 
        } 
        return -1; 
    } 
}; 

int main() { 
    Solution ob; 
    vector<int> v = {20,-5,-5,25,20,5,5,5,1,25}; 
    cout << (ob.minJumps(v)); 
    return 0; 
}

इनपुट

{20,-5,-5,25,20,5,5,5,1,25}

आउटपुट

3
  1. - C++ में निम गेम

    समस्या विवरण मान लीजिए हम दूसरे खिलाड़ी के साथ निम गेम नामक गेम खेल रहे हैं। पत्थरों का एक ढेर है, प्रत्येक बार एक खिलाड़ी बारी-बारी से 1 से 3 पत्थर हटाता है। जो अंतिम पत्थर हटाता है वह विजेता होता है। खिलाड़ी 1 पत्थर हटाने की पहली बारी लेगा। दोनों खिलाड़ी बहुत चालाक हैं और खेल के लिए इष्टतम रणनीति

  1. - C++ में स्टोन गेम III

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

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

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