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

C++-এ বাইনারি ম্যাট্রিক্সে ম্যাক্সিমাম ডেসিমেল ভ্যালু পাথ


দেওয়া কাজ হচ্ছে একটি বর্গাকার বাইনারি অ্যারেতে উপরের বাম এলিমেন্ট থেকে নিচের ডান এলিমেন্ট পর্যন্ত পাথে যেতে সময় প্রাপ্ত হয় এমন সর্বোচ্চ পূর্ণসংখ্যা মান বের করা, অর্থাৎ ইনডেক্স [0][0] থেকে ইনডেক্স [n - 1][n - 1] পর্যন্ত।

পথ কভার করার সময় আমরা শুধু ডানে ([i][j + 1]) বা নিচে ([i + 1][j]) যেতে পারি।

পূর্ণসংখ্যা মান হবে ট্রাভার্স করা পথের বিটগুলো ব্যবহার করে ক্যালকুলেট করা।

উদাহরণ দিয়ে বুঝি −

ইনপুট

m = { 
    {1, 1, 1, 1}, 
    {0, 0, 1, 0}, 
    {1, 0, 1, 1}, 
    {0, 1, 1, 1} }

আউটপুট

127

ব্যাখ্যা

যে পথটি আমরা নিয়েছি: [0, 0] →[0, 1] → [0, 2] → [1, 2] → [2, 2] → [3, 2] →[3, 3]

তাহলে ডেসিমেল ভ্যালু হয় = 1*(20) + 1*(21) + 1*(22) + 1*(23) + 1*(24) + 1*(25) + 1*(26)

                                                          = 1 + 2 + 4 + 8 + 16 + 32 + 64

                                                          = 127

ইনপুট

m = { 
    {1, 0, 1, 1}, 
    {0, 0, 1, 0}, 
    {1, 0, 0, 1}, 
    {0, 1, 1, 1} }

আউটপুট

109

নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতি নিম্নরূপ

  • প্রথমে বর্গাকার ম্যাট্রিক্সের সাইডের আকার #define দিয়ে টপে ডিক্লেয়ার।

  • main() ফাংশনে একটি ২D অ্যারে int m[][4] তৈরি করা হয় ম্যাট্রিক্স সংরক্ষণের জন্য এবং Max(m, 0, 0, 0) কল করা হয়।

  • max() ফাংশনে প্রথমে চেক করা হয় if (i >= side || j >= side )। যদি সত্য হয় তবে ম্যাট্রিক্স বাউন্ডেরি বাইরে এবং ০ রিটার্ন।

  • একটি নতুন ভেরিয়েবল int ans এবং ans = max(Max(m, i, j+1, pw+1), Max(m, i+1, j, pw+1))।

  • তারপর চেক করা হয় if (m[i][j] == 1)। যদি সত্য হয় তবে রিটার্ন pow(2, pw) + ans।

  • অন্যথায় সিম্পলি ans রিটার্ন।

উদাহরণ

#include<bits/stdc++.h> 
using namespace std; 
#define side 4 // pw is power of 2 

int Max(int m[][side], int i, int j, int pw){ 
    // Out of boundary 
    if (i >= side || j >= side ) 
        return 0; 
    int ans = max(Max(m, i, j+1, pw+1), Max(m, i+1, j, pw+1)); 
    if (m[i][j] == 1) 
        return pow(2, pw) + ans; 
    else 
        return ans; 
} 
//main function 
int main(){ 
    int m[][4] = {{1, 1, 1, 1},{0, 0, 1, 0},{1, 0, 1, 1},{0, 1, 1, 1}}; 
    cout << Max(m, 0, 0, 0); 
    return 0; 
}

আউটপুট

127

  1. সি++-এ বাইনারি ট্রিতে সর্বোচ্চ последователь পথের দৈর্ঘ্য

  2. বাইনারি ট্রির সর্বোচ্চ প্রস্থ C++-এ

  3. সর্বোচ্চ বাইনারি ট্রি নির্মাণ C++-এ

  4. C++-এ বাইনারি ট্রিতে সর্বোচ্চ পথ যোগফল