কম্পিউটার

C++ এ ডায়াগোনাল ট্রাভার্স


ধরুন আমাদের কাছে M x N উপাদানগুলির একটি ম্যাট্রিক্স রয়েছে, আমাদের ম্যাট্রিক্সের সমস্ত উপাদানগুলিকে তির্যক ক্রমে খুঁজে বের করতে হবে। তাই ম্যাট্রিক্স যদি −

এর মত হয়
1 2 3
4 5 6
7 8 9

আউটপুট হবে [1,2,4,7,5,3,6,8,9]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি অ্যারে রেট তৈরি করুন, সারি সেট করুন :=0 এবং col :=0, n :=সারি গণনা, m :=কল গণনা, ডাউন :=মিথ্যা
  • আমি 0 থেকে n – 1
      পরিসরে
    • x :=i, y :=0
    • একটি অ্যারে টেম্প তৈরি করুন
    • যখন x>=0 এবং y
    • টেম্পে ম্যাট্রিক্স[x,y] ঢোকান এবং x 1 কমিয়ে y বাড়ান
  • যদি ডাউন সত্য হয়, তাহলে টেম্প অ্যারেটি বিপরীত করুন
  • আমি রেঞ্জ 0 থেকে টেম্প - 1 এর আকারের জন্য, রেটে টেম্প[i] ঢোকান
  • নিচে :=নিচের বিপরীত
  • আমি 1 থেকে m – 1
      পরিসরে
    • x :=n – 1, y :=1, একটি অ্যারে টেম্প তৈরি করুন
    • যখন x>=0 এবং y
    • টেম্পে ম্যাট্রিক্স[x, y] ঢোকান এবং x 1 কমিয়ে y বাড়ান
  • আমি রেঞ্জ 0 থেকে টেম্প - 1 এর আকারের জন্য, রেটে টেম্প[i] ঢোকান
  • নিচে :=নিচের বিপরীত
  • রিটার্ন রিটার্ন।
  • আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

    উদাহরণ

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<int> v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    class Solution {
       public:
       vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
          vector <int> ret;
          int row = 0;
          int col = 0;
          int n = matrix.size();
          int m = n? matrix[0].size() : 0;
          bool down = false;
          for(int i = 0; i < n; i++){
             int x = i;
             int y = 0;
             vector <int> temp;
             while(x >= 0 && y < m){
                temp.push_back(matrix[x][y]);
                x--;
                y++;
             }
             if(down) reverse(temp.begin(), temp.end());
             for(int i = 0; i < temp.size(); i++)ret.push_back(temp[i]);
             down = !down;
          }
          for(int i = 1; i < m; i++){
             int x = n - 1;
             int y = i;
             vector <int> temp;
             while(x >= 0 && y < m){
                temp.push_back(matrix[x][y]);
                x--;
                y++;
             }
             if(down) reverse(temp.begin(), temp.end());
             for(int i = 0; i < temp.size(); i++)ret.push_back(temp[i]);
             down = !down;
          }
          return ret;
       }
    };
    main(){
       vector<vector<int>> v = {{1,2,3},{4,5,6},{7,8,9}};
       Solution ob;
       print_vector(ob.findDiagonalOrder(v));
    }

    ইনপুট

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

    আউটপুট

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

    1. C++ এ রেখার প্রতিফলন

    2. C++ এ ডায়াগোনাল ট্রাভার্স II

    3. C++ এ ম্যাট্রিক্সের জিগজ্যাগ (বা তির্যক) ট্রাভার্সাল

    4. C++ এ লোয়ার দিয়ে উপরের তির্যক অদলবদল করুন