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

C++ में मैट्रिक्स ब्लॉक योग


मान लीजिए कि हमारे पास एक m * n मैट्रिक्स है जिसे mat कहा जाता है और एक पूर्णांक K, हमें एक और मैट्रिक्स उत्तर खोजना होगा जहां प्रत्येक उत्तर [i] [j] सभी तत्वों का योग है mat[ r][c] के लिए i - K <=r <=i + K, j - K <=c <=j + K, और (r, c) मैट्रिक्स में एक मान्य स्थिति है। तो अगर इनपुट की तरह है -

1 2 3
4 5 6
7 8 9

और k 1 है, तो आउटपुट होगा -

12 21 16
27 45 33
24 39 28

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • n :=पंक्तियों की संख्या, और m =स्तंभों की संख्या
  • एक मैट्रिक्स उत्तर परिभाषित करें, जिसका क्रम n x m है
  • मैं के लिए 0 से n - 1 की सीमा में
    • जे के लिए 0 से मी - 1 की सीमा में
      • r श्रेणी में i - k से i + k के लिए
        • c के लिए j - k से j + k की श्रेणी में
          • यदि r और c मैट्रिक्स इंडेक्स के अंदर हैं, तो
            • ans[i, j] :=ans[i, j] + mat[r, c]
  • वापसी उत्तर

उदाहरण(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. सी ++ में मैट्रिक्स में अधिकतम पथ योग

    इस समस्या में, हमें M*N आकार का एक 2D मैट्रिक्स दिया गया है। हमारा काम एक प्रोग्राम बनाना है जो मैट्रिक्स में अधिकतम पथ योग ढूंढेगा। यहां, मैट्रिक्स में अधिकतम पथ योग को एक पंक्ति से अंतिम पंक्ति तक सभी तत्वों के योग के रूप में परिभाषित किया गया है। पथ को पार करने के लिए अनुमत चालें नीचे की ओर और व

  1. सी++ बूलियन मैट्रिक्स

    बूलियन मैट्रिक्स एक मैट्रिक्स है जिसमें केवल दो तत्व 0 और 1 हैं। इस बूलियन मैट्रिक्स प्रश्न के लिए, हमारे पास एमएक्सएन आकार का बूलियन मैट्रिक्स एआर [एम] [एन] है। और हल करने की शर्त है, यदि m[i][j] =1 तो m[i] =1 और m[j] =1 जिसका अर्थ है कि ith पंक्ति और jth कॉलम के सभी तत्व 1 हो जाएंगे। आइए एक उदाहर

  1. सी ++ में विभाज्य योग?

    यहाँ हम देखेंगे कि विभाज्य योग क्या है? n का विभाज्य योग n को छोड़कर n के सभी पूर्ण गुणनखंडों का योग है। उदाहरण के लिए, यदि संख्या 20 है, तो पूर्ण गुणनखंड (1, 2, 4, 5, 10) हैं। तो विभाज्य योग 22 है। एक दिलचस्प तथ्य यह है कि, यदि किसी संख्या का विभाज्य योग ही वह संख्या है, तो वह संख्या एक पूर्ण संख्