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

सी ++ चूहा एक भूलभुलैया में कई चरणों के साथ या कूदने की अनुमति है

एक एन * एन ग्रिड भूलभुलैया को देखते हुए। हमारा चूहा ग्रिड के ऊपरी बाएँ कोने में मौजूद है। अब चूहे केवल नीचे या आगे बढ़ सकते हैं, और यदि और केवल अगर ब्लॉक के पास गैर-शून्य मान है तो अब इस भिन्नता में चूहे को कई छलांग लगाने की अनुमति है। चूहा वर्तमान सेल से जो अधिकतम छलांग ले सकता है, वह सेल में मौजूद संख्या है, और अब आपको यह पता लगाने का काम सौंपा गया है कि क्या चूहा ग्रिड के निचले दाएं कोने तक पहुंच सकता है, उदाहरण के लिए -

Input : { { {1, 1, 1, 1},
{2, 0, 0, 2},
{3, 1, 0, 0},
{0, 0, 0, 1}
},
Output : { {1, 1, 1, 1},
{0, 0, 0, 1},
{0, 0, 0, 0},
{0, 0, 0, 1}
}

Input : {
{2, 1, 0, 0},
{2, 0, 0, 1},
{0, 1, 0, 1},
{0, 0, 0, 1}
}
Output: Path doesn't exist

समाधान खोजने के लिए दृष्टिकोण

इस दृष्टिकोण में, हम हर उस पथ को ट्रैक करने के लिए बैकट्रैकिंग का उपयोग करेंगे जो चूहा अब ले सकता है। यदि चूहा किसी भी रास्ते से हमारी मंजिल तक पहुंच जाता है तो हम उस रास्ते के लिए सच होकर लौट जाते हैं और फिर उस रास्ते को छाप देते हैं। अन्यथा, हम प्रिंट करते हैं कि पथ मौजूद नहीं है।

उदाहरण

 
#include <bits/stdc++.h>
using namespace std;
#define N 4 // size of our grid
bool solveMaze(int maze[N][N], int x, int y, // recursive function for finding the path
    int sol[N][N]){
        if (x == N - 1 && y == N - 1) { // if we reached our goal we return true and mark our goal as 1
            sol[x][y] = 1;
            return true;
    }
    if (x >= 0 && y >= 0 && x < N && y < N && maze[x][y]) {
        sol[x][y] = 1; // we include this index as a path
        for (int i = 1; i <= maze[x][y] && i < N; i++) { // as maze[x][y] denotes the number of jumps you can take                                             //so we check for every jump in every direction
            if (solveMaze(maze, x + i, y, sol) == true) // jumping right
               return true;
            if (solveMaze(maze, x, y + i, sol) == true) // jumping downward
               return true;
        }
        sol[x][y] = 0; // if none are true then the path doesn't exist
                   //or the path doesn't contain current cell in it
        return false;
    }
    return false;
}
int main(){
    int maze[N][N] = { { 2, 1, 0, 0 }, { 3, 0, 0, 1 },{ 0, 1, 0, 1 },
                   { 0, 0, 0, 1 } };
    int sol[N][N];
    memset(sol, 0, sizeof(sol));
    if(solveMaze(maze, 0, 0, sol)){
        for(int i = 0; i < N; i++){
            for(int j = 0; j < N; j++)
                cout << sol[i][j] << " ";
            cout << "\n";
        }
    }
    else
        cout << "Path doesn't exist\n";
    return 0;
}

आउटपुट

1 0 0 0
1 0 0 1
0 0 0 1
0 0 0 1

उपरोक्त कोड की व्याख्या

उपरोक्त दृष्टिकोण में, हम प्रत्येक पथ की जांच करते हैं जो यह हमारे वर्तमान सेल से बना सकता है, और जब हम इसकी जांच करते हैं, तो हम पथों को एक के रूप में चिह्नित करते हैं। जब हमारा मार्ग गतिरोध पर पहुंचता है, तो हम जांचते हैं कि वह गतिरोध हमारी मंजिल है या नहीं। अब, यदि वह हमारा गंतव्य नहीं है, तो हम पीछे जाते हैं, और जैसे ही हम पीछे जाते हैं, हम सेल को 0 के रूप में चिह्नित करते हैं क्योंकि यह पथ मान्य नहीं है, और इस तरह हमारा कोड आगे बढ़ता है।

निष्कर्ष

इस ट्यूटोरियल में, हम चूहे को एक भूलभुलैया में हल करते हैं जिसमें कई चरणों या छलांग की अनुमति है। हमने इस समस्या के लिए C++ प्रोग्राम और संपूर्ण दृष्टिकोण (Normal) भी सीखा जिसके द्वारा हमने इस समस्या को हल किया। हम उसी प्रोग्राम को अन्य भाषाओं जैसे सी, जावा, पायथन और अन्य भाषाओं में लिख सकते हैं। हमें उम्मीद है कि आपको यह ट्यूटोरियल मददगार लगा होगा।


  1. C++ में 3n स्लाइस के साथ पिज़्ज़ा

    मान लीजिए कि एक पिज्जा है जिसमें अलग-अलग आकार के 3n स्लाइस हैं, मैं और मेरे दो दोस्त पिज्जा के स्लाइस इस प्रकार लेंगे - मैं कोई भी पिज़्ज़ा स्लाइस चुनूंगा। मेरा दोस्त अमल मेरी पसंद की घड़ी की विपरीत दिशा में अगला टुकड़ा उठाएगा। मेरा दोस्त बिमल मेरी पसंद की अगली स्लाइस को दक्षिणावर्त दिशा मे

  1. सी++ में जंप गेम IV

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

  1. सी++ में जंप गेम वी

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी है जिसे arr और एक पूर्णांक d कहा जाता है। एक चरण में हम इंडेक्स i से − . पर जा सकते हैं i + x जहां:i + x