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

C++-এ ম্যাট্রিক্স ব্লক সম


মনে করুন একটি m x n ম্যাট্রিক্স `mat` এবং একটি পূর্ণসংখ্যা K আছে, আমাদের একটি অন্য ম্যাট্রিক্স `answer` বের করতে হবে যেখানে প্রতিটি `answer[i][j]` হলো সব `mat[r][c]` এর যোগফল যাতে `i - K <= r <= i + K`, `j - K <= c <= j + K`, এবং `(r, c)` ম্যাট্রিক্সের মধ্যে একটি বৈধ পজিশন। যদি ইনপুট নিচের মোতাবিক হয় -

123
456
789

এবং k = 1 হলে, আউটপুট হবে -

122116
274533
243928

এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব -

  • `n` := সারি সংখ্যা, এবং `m` = কলাম সংখ্যা
  • `ans` নামক একটি ম্যাট্রিক্স সংজ্ঞায়িত করুন, যার আকার n x m
  • `i` = 0 থেকে n-1 পর্যন্ত লুপ চালান
    • `j` = 0 থেকে m-1 পর্যন্ত লুপ চালান
      • `r` = i-k থেকে i+k পর্যন্ত লুপ চালান
        • `c` = j-k থেকে j+k পর্যন্ত লুপ চালান
          • যদি `r` এবং `c` ম্যাট্রিক্সের ইন্ডেক্সের মধ্যে থাকে, তবে
            • `ans[i, j] := ans[i, j] + mat[r, c]`
  • `ans` রিটার্ন করুন

উদাহরণ (C++)

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন -

#include <bits/stdc++.h> using namespace std; void print_vector(vector<vector<auto> > v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << "[";       for(int j = 0; j <v[i].size(); j++){          cout << v[i][j] << ", ";       }       cout << "],";    }    cout << "]"<<endl; } class Solution { public:    vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {       int n = mat.size();       int m = mat[0].size();       vector < vector <int> > ans(n , vector <int> (m));       for(int i = 0; i < n; i++){          for(int j = 0; j < m; j++){             for(int r = i - k;r <= i + k; r++){                for(int c = j - k; c <= j + k; c++){                   if(r>= 0 && r < n && c >= 0 && c < m){                      ans[i][j] += mat[r][c];                   }                }             }          }       }       return ans;    } }; main(){    vector<vector<int>> v1 = {{1,2,3},{4,5,6},{7,8,9}};    Solution ob;    print_vector(ob.matrixBlockSum(v1, 1)); }

ইনপুট

[[1,2,3],[4,5,6],[7,8,9]] 1

আউটপুট

[[12, 21, 16, ],[27, 45, 33, ],[24, 39, 28, ],]

  1. C++-এ ম্যাট্রিক্সের প্রিফিক্স সম (Prefix Sum of Matrix / 2D Array)

  2. C++-এ ম্যাট্রিক্সে সর্বোচ্চ পাথ সাম

  3. C++ বুলিয়ান ম্যাট্রিক্স (Boolean Matrix)

  4. C++-এ অ্যালিকোট সম (Aliquot Sum)