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

C++ में मैट्रिक्स में दिए गए स्कोर तक पहुंचने के तरीकों की संख्या गिनना


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

matrix[0][0] से शुरू करके केवल चालें हो सकती हैं, matrix[0][1] पर जाएं (दायां कदम) या matrix[1][0] पर जाएं (नीचे का कदम) और योग=स्कोर तक पहुंचने के लिए मान जोड़ें।

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

उदाहरण के लिए

इनपुट -  matrix[row][col] = { {1, 1}, { 1, 1} } score=3

आउटपुट - मैट्रिक्स में दिए गए स्कोर तक पहुंचने के तरीकों की संख्या: 2

व्याख्या - स्कोर निम्नलिखित तरीकों से पहुंचा जा सकता है:

तरीका 1: इंडेक्स (0,0) + (0,1) + (1,1) पर तत्व जोड़ना = 1+1+1 = 3

तरीका 2: इंडेक्स (0,0) + (1,0) + (1,1) पर तत्व जोड़ना = 1+1+1 = 3

इनपुट -  matrix[row][col] = {  {1,1,2},{ 2,1,1}, {1,2,2} } score=7

आउटपुट - मैट्रिक्स में दिए गए स्कोर तक पहुंचने के तरीकों की संख्या: 2

व्याख्या - स्कोर निम्नलिखित तरीकों से पहुंचा जा सकता है:

तरीका 1: इंडेक्स (0,0) + (0,1) + (1,1) + (1,2) + (2,2) पर तत्व जोड़ना = 1+1+1+2+2 = 7

तरीका 2: इंडेक्स (0,0) + (0,1) + (1,1) + (2,1) + (2,2) पर तत्व जोड़ना = 1+1+1+2+2 = 7

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

इस दृष्टिकोण में हम समस्या को हल करने के लिए डायनामिक प्रोग्रामिंग का उपयोग करेंगे। हम दो सरणी arr[row][col][size] और check[row][col][size] का उपयोग करेंगे। सरणी check मैट्रिक्स[][] के सेल्स को देखा गया के रूप में true से चिह्नित करेगी। सरणी arr[][][] का उपयोग matrix[0][0] से किसी विशेष सेल तक पहुंचने के तरीकों की संख्या संग्रहीत करने के लिए किया जाता है। पुनरावर्ती रूप से हम तरीकों की गणना करेंगे।

  • संख्याओं को संग्रहीत करने के लिए 2D सरणी मैट्रिक्स लें।
  • वेरिएबल स्कोर को इनपुट के रूप में लें।
  • दो सरणी int arr[row][col][size] और bool check[row][col][size] लें।
  • फ़ंक्शन matrix_score(int matrix[row][col], int rows, int cols, int sc) का उपयोग मैट्रिक्स में दिए गए स्कोर तक पहुंचने के तरीकों की संख्या लौटाने के लिए किया जाता है।
  • यदि स्कोर sc 0 से कम है तो 0 लौटाएं। (पुनरावृत्ति समाप्त करने के लिए या गलत इनपुट के मामले में)
  • यदि पंक्तियों या स्तंभों की संख्या 0 से कम है तो 0 लौटाएं। (पुनरावृत्ति समाप्त करने के लिए)।
  • यदि पहला सेल इनपुट स्कोर sc के बराबर है तो 1 लौटाएं एकमात्र तरीके के रूप में। यदि नहीं तो 0 लौटाएं।
  • यदि वर्तमान सेल पहले से देखा गया है, तो इस सेल पर तरीकों की संख्या arr[rows][cols][sc] के रूप में लौटाएं।
  • यदि उपरोक्त सभी शर्तें लागू नहीं होतीं तो वर्तमान सेल को देखा गया चिह्नित करें। check[rows][cols][sc] = true का उपयोग करके।
  • temp_1 = matrix_score(matrix, rows-1, cols, sc-matrix[rows][cols]) की गणना करें 
  • temp_2 = matrix_score(matrix, rows, cols-1, sc-matrix[rows][cols]) की गणना करें
  • तरीकों की संख्या को arr[rows][cols][sc] = temp_1 + temp_2 के रूप में सेट करें।
  • अंत में arr[rows][cols][sc] लौटाएं।

उदाहरण

#include <iostream> using namespace std; #define row 2 #define col 2 #define size 30 int arr[row][col][size]; bool check[row][col][size]; int matrix_score(int matrix[row][col], int rows, int cols, int ways) {    if (ways < 0) {       return 0;    }    if (rows < 0 || cols < 0) {       return 0;    }    if (rows == 0) {       if (cols == 0) {          if (ways == matrix[0][0]) {             return 1;          } else {             return 0;          }       }    }    if (check[rows][cols][ways]) {       return arr[rows][cols][ways];    }    check[rows][cols][ways] = true;    int temp_1 = matrix_score(matrix, rows - 1, cols, ways - matrix[rows][cols]);    int temp_2 = matrix_score(matrix, rows, cols - 1, ways - matrix[rows][cols]);    arr[rows][cols][ways] = temp_1 + temp_2;    return arr[rows][cols][ways]; } int main() {    int matrix[row][col] = {       {          1,          1       },       {          1,          1       }    };    int ways = 3;    cout << "Count of number of ways to reach a given score in a Matrix are: " << matrix_score(matrix, row - 1, col - 1, ways);    return 0; }

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

आउटपुट

Count of number of ways to reach a given score in a Matrix are: 2

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

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

  1. - C++ में दिए गए मान वाले अंतरालों की संख्या गिनें

    समस्या विवरण एक 2D सरणी arr[][] दी गई है जिसमें अंतराल (intervals) हैं और एक संख्या value दी गई है। लक्ष्य उन अंतरालों की संख्या ज्ञात करना है जिनके बीच में value स्थित है। उदाहरण के लिए, अंतराल [[1,5], [3,7]] हैं और value=4 है, तो यह दोनों अंतरालों में स्थित है और गिनती 2 होगी। उदाहरण इनपुट arr[4

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

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