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

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


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

123
456
789

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

এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব −

  • একটি ret অ্যারে তৈরি করুন, row := 0 এবং col := 0 সেট করুন, n := সারির সংখ্যা, m := কলামের সংখ্যা, down := false
  • i = 0 থেকে n – ১ পর্যন্ত
    • x := i, y := 0
    • একটি temp অ্যারে তৈরি করুন
    • যখন x >= 0 এবং y < m, করুন
      • matrix[x,y] temp-এ যোগ করুন, এবং x ১ হ্রাস করুন এবং y ১ বৃদ্ধি করুন
    • যদি down true হয়, তবে temp অ্যারে উল্টান
    • i = 0 থেকে temp-এর আকার – ১ পর্যন্ত, temp[i] ret-এ যোগ করুন
    • down := down-এর বিপরীত
  • i = 1 থেকে m – ১ পর্যন্ত
    • x := n – 1, y := 1, একটি temp অ্যারে তৈরি করুন
    • যখন x >= 0 এবং y < m,
      • matrix[x, y] temp-এ যোগ করুন এবং x ১ হ্রাস করুন এবং y ১ বৃদ্ধি করুন
    • i = 0 থেকে temp-এর আকার – ১ পর্যন্ত, temp[i] ret-এ যোগ করুন
    • down := down-এর বিপরীত
  • ret ফেরত দিন।

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

উদাহরণ

#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++-এ Line Reflection: ২D প্লেনে বিন্দুগুলোর Y-অক্ষ সমান্তরাল প্রতিফলন লাইন আছে কিনা যাচাই করা

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

  3. C++-এ ম্যাট্রিক্সের জিগজ্যাগ (ডায়াগোনাল) ট্রাভার্সাল

  4. C++-এ আপার ডায়াগোনালকে লোয়ার ডায়াগোনালের সাথে সোয়াপ করা