কম্পিউটার টিউটোরিয়াল

ম্যাট্রিক্সে নির্দিষ্ট স্কোর পৌঁছানোর পথের সংখ্যা গণনা (C++)

একটি স্কয়ার ম্যাট্রিক্স matrix[][] নন-নেগেটিভ নম্বর ধারণ করে। একটি ভেরিয়েবল score দেওয়া আছে। লক্ষ্য হল matrix[0][0]-থেকে শুধু রাইট এবং ডাউন মুভ দিয়ে এলিমেন্ট যোগ করে দেওয়া score পৌঁছানোর পথের সংখ্যা বের করা।

উদাহরণ দিয়ে বোঝা যাক

উদাহরণ ১

ইনপুট - matrix[2][2] = {{1,1}, {1,1}}, score=3

আউটপুট - নির্দিষ্ট স্কোর পৌঁছানোর পথের সংখ্যা: ২

ব্যাখ্যা - দুটি পথ:

  • (0,0)+(0,1)+(1,1) = 1+1+1=3
  • (0,0)+(1,0)+(1,1) = 1+1+1=3

উদাহরণ ২

ইনপুট - matrix[3][3] = {{1,1,2}, {2,1,1}, {1,2,2}}, score=7

আউটপুট - নির্দিষ্ট স্কোর পৌঁছানোর পথের সংখ্যা: ২

ব্যাখ্যা - দুটি পথ:

  • (0,0)+(0,1)+(1,1)+(1,2)+(2,2) = 1+1+1+2+2=7
  • (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 ভিজিটেড সেল মার্ক করে। arr[][][] নির্দিষ্ট সেলে পৌঁছানোর পথ সংখ্যা সংরক্ষণ করে। রিকার্সিভলি পথ সংখ্যা হিসাব করা হয়।

  • ২ডি অ্যারে matrix নম্বর সংরক্ষণের জন্য।
  • ভেরিয়েবল score ইনপুট নিন।
  • দুটি অ্যারে int arr[row][col][size] এবং bool check[row][col][size]।
  • ফাংশন matrix_score(int matrix[row][col], int rows, int cols, int sc) পথ সংখ্যা রিটার্ন করে।
  • যদি sc < 0 হয় তবে ০ রিটার্ন করুন।
  • যদি হয় তবে ০ রিটার্ন করুন।
  • যদি rows==0 && cols==0 হয় তবে sc==matrix[0][0] হলে ১ রিটার্ন করুন, অন্যথায় ০।
  • যদি check[rows][cols][sc] true হয় তবে 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++)

  2. মেজে গন্তব্যে পৌঁছানোর পথের সংখ্যা গণনা (C++)

  3. C++-এ একটি প্রদত্ত মান কোন ইন্টারভালগুলোর মধ্যে আছে সেটির সংখ্যা গণনা

  4. C++-এ একটি সেটকে k সাবসেটে ভাগ করার পদ্ধতির সংখ্যা গণনা