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

C++ में भूलभुलैया में गंतव्य तक पहुंचने के तरीकों की संख्या गिनना


एक भूलभुलैया दी गई है जिसे row X col मैट्रिक्स के रूप में दर्शाया गया है जिसमें बाधा को -1 के रूप में दर्शाया गया है और एक स्पष्ट सेल का मान -1 के अलावा है। लक्ष्य पहले सेल arr[0][0] से शुरू करके अंतिम सेल arr[row][col] तक पहुंचना है जैसे कि केवल दो चालें अनुमत हैं:

  • दायां कदम arr[i][j] से arr[i][j+1] तक और 
  • नीचे का कदम arr[i][j] से arr[i+1][j] तक।

उदाहरणों से समझते हैं।

इनपुट -  arr[row][col] =  {{0, 0, 0}, {-1, -1, 0}, {0, 0, 0}}

आउटपुट - भूलभुलैया में गंतव्य तक पहुंचने के तरीकों की संख्या: 1

व्याख्या

      0    1   2   

0    0    0   0

1   -1   -1   0

2    0    0   0

तरीके होंगे :

  • सेल (0,0) → सेल (0,1) → सेल (0,2) → सेल(1,2) → सेल(2,0)

इनपुट -  arr[row][col] =  { {0, 0, 0, 0}, {-1, 0, -1, 0}, {-1, 0, -1, 0}, {0, 0, 0, 0}}

आउटपुट - भूलभुलैया में गंतव्य तक पहुंचने के तरीकों की संख्या: 2

व्याख्या

      0    1   2   3 

0    0    0   0   0

1   -1    0  -1   0

2   -1    0  -1   0

3    0    0   0   0

तरीके होंगे :

  • सेल (0,0) → सेल (0,1) → सेल (1,1) → सेल(2,1) → सेल(3,1) → सेल(3,2) → सेल(3,3)
  • सेल (0,0) → सेल (0,1) → सेल (0,2) → सेल(0,3) → सेल(1,3) → सेल(2,3) → सेल(3,3) 

नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण

इस दृष्टिकोण में हम पहले सभी शून्य को 1 सेट करेंगे। भूलभुलैया मैट्रिक्स को फिर से पार करें और अब प्रत्येक सेल के लिए, यदि यह बाधा (-1) है तो इसे अनदेखा करें। यदि नहीं, तो ऊपरी सेल (i-1,j) और बायां सेल (i,j-1) जांचें। यदि यह शून्य से अधिक है तो इसका मान वर्तमान सेल (i,j) में जोड़ें। इस तरह हमें सेल (row-1,col-1) पर योग मिलेगा जो इसे पहुंचने के कुल तरीके होंगे।

  • भूलभुलैया के रूप में इनपुट सरणी arr[row][col] लें।
  • फ़ंक्शन destination_maze(int arr[row][col]) arr लेता है और भूलभुलैया में गंतव्य तक पहुंचने के तरीकों की संख्या लौटाता है।
  • यदि पहला सेल अवरुद्ध है तो 0 लौटाएं गंतव्य तक पहुंचने के तरीकों के रूप में।
  • अब सबसे बाएं कॉलम को पार करें और सभी 0s को 1 सेट करें। पहली बाधा पर लूप तोड़ें क्योंकि इसके नीचे के सेल पहुंचे नहीं जा सकते। इंडेक्स i=0 से i<row से शुरू करें और यदि यह 0 है तो arr[i][0] को 1 सेट करें।
  • इसी तरह j=0 से j<col तक पहली पंक्ति के लिए करें और यदि यह 0 है तो arr[j][0] को 1 सेट करें।
  • सेल (1,1) से फिर से arr को पार करें और यदि arr[i][j] -1 है तो कुछ न करें।
  • यदि arr[i-1][j] या arr[i][j-1] 0 से अधिक है तो arr[i][j] उनसे पहुंच योग्य है। तो उनका मान इसमें जोड़ें।
  • अंत में हमारे पास arr[row-1][col-1] होगा इसे पहुंचने के कुल तरीकों के रूप में।
  • यदि यह >0 है तो इसे लौटाएं अन्यथा 0 लौटाएं।

उदाहरण

#include<bits/stdc++.h> using namespace std; #define row 3 #define col 3 int destination_maze(int arr[row][col]) {    if (arr[0][0] == -1) {       return 0;    }    for (int i = 0; i < row; i++) {       if (arr[i][0] == 0) {          arr[i][0] = 1;       } else {          break;       }    }    for (int i = 1; i < col; i++) {       if (arr[0][i] == 0) {          arr[0][i] = 1;       } else {          break;       }    }    for (int i = 1; i < row; i++) {       for (int j = 1; j < col; j++) {          if (arr[i][j] == -1) {             continue;          }          if (arr[i - 1][j] > 0) {             arr[i][j] = (arr[i][j] + arr[i - 1][j]);          }          if (arr[i][j - 1] > 0) {             arr[i][j] = (arr[i][j] + arr[i][j - 1]);          }       }    }    if (arr[row - 1][col - 1] > 0) {       return arr[row - 1][col - 1];    } else {       return 0;    } } int main() {    int arr[row][col] = {       {          0,          0,          0       },       {          -1,          -1,          0       },       {          0,          0,          0       }    };    cout << "Count of number of ways to reach destination in a Maze are: " << destination_maze(arr);    return 0; }

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा -

आउटपुट

Count of number of ways to reach destination in a Maze are: 1

  1. C++ में एक सेट को k उपसमुच्चयों में विभाजित करने के तरीकों की संख्या गिनें C++ में एक सेट को k उपसमुच्चयों में विभाजित करने के तरीकों की संख्या गिनें

    समस्या विवरण दो संख्याएं e और p दी गई हैं। लक्ष्य उन तरीकों की संख्या गिनना है जिनसे हम एक सेट के e तत्वों को p पार्टीशन/उपसमुच्चयों में विभाजित कर सकते हैं। उदाहरण इनपुट e=4 p=2 आउटपुट सेट को k उपसमुच्चयों में विभाजित करने के तरीकों की संख्या: 7 व्याख्या यदि तत्व हैं: a b c d तो उन्हें 2 पार्टीशन

  1. C++ में n x m आकार के फर्श को 1 x m टाइलों से टाइल करने के तरीकों की संख्या गिनें C++ में n x m आकार के फर्श को 1 x m टाइलों से टाइल करने के तरीकों की संख्या गिनें

    समस्या विवरण दो संख्याएं n और m दी गई हैं जो कमरे के फर्श की लंबाई और चौड़ाई दर्शाती हैं। लक्ष्य उन तरीकों की संख्या गिनना है जिनसे इस फर्श को 1xm आकार की टाइलों का उपयोग करके टाइल किया जा सकता है। उदाहरण इनपुट n=3 m=2 आउटपुट फर्श को टाइल करने के तरीकों की संख्या: 3 व्याख्या तीन 1x2 टाइलें नीचे दि

  1. C++ में आयत में वर्गों की संख्या गिनना C++ में आयत में वर्गों की संख्या गिनना

    =B। लक्ष्य LxB आकार के आयत में समायोजित किए जा सकने वाले वर्गों की संख्या ढूंढना है। उपरोक्त आकृति 3x2 आकार के एक आयत को दर्शाती है। इसमें 2, 2x2 वर्ग और 6, 1x1 वर्ग हैं। कुल वर्ग = 6+2=8। LxB आकार के हर आयत में L*B संख्या के 1x1 वर्ग होते हैं। सबसे बड़े वर्ग BxB आकार के होते हैं। L=B=1 के लिए, वर