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

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

আমাদের কাছে একটি N x M ম্যাট্রিক্স আছে, যা আমাদেরকে উপরের বাম কোণ থেকে নিচের ডান কোণ পর্যন্ত ক্রমবর্ধমান ক্রমে ডায়াগোনালি সাজাতে হবে। উদাহরণস্বরূপ, যদি ম্যাট্রিক্সটি নিচের মতো হয় -

3311
2212
1112

আউটপুট ম্যাট্রিক্সটি হবে -

1111
1222
1233

সমাধানের ধাপসমূহ

  • solve() নামে একটি মেথড সংজ্ঞায়িত করুন, যা si, sj এবং ম্যাট্রিক্স mat গ্রহণ করবে।
  • n := সারিগুলোর সংখ্যা এবং m := কলামগুলোর সংখ্যা।
  • temp নামে একটি অ্যারে তৈরি করুন।
  • i := si এবং j := sj, এবং index := 0।
  • while i < n and j < m:
    • mat[i][j] কে temp-এ যোগ করুন, তারপর i এবং j-কে 1 বাড়ান।
  • temp অ্যারেটি সাজান।
  • index := 0, i := si এবং j := sj সেট করুন।
  • while i < n and j < m:
    • mat[i][j] := temp[index]
    • i, j এবং index-কে 1 বাড়ান।
  • মূল মেথড থেকে নিম্নলিখিত কাজ করুন:
    • n := সারিগুলোর সংখ্যা এবং m := কলামগুলোর সংখ্যা।
    • for i in range 0 to n-1: solve(i, 0, mat) কল করুন।
    • for j in range 1 to m-1: solve(0, j, mat) কল করুন।
    • mat রিটার্ন করুন।

উদাহরণ (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:
    void solve(int si, int sj, vector<vector<int>> &mat){
        int n = mat.size();
        int m = mat[0].size();
        vector<int> temp;
        int i = si;
        int j = sj;
        int idx = 0;
        while(i < n && j < m){
            temp.push_back(mat[i][j]);
            i++;
            j++;
        }
        sort(temp.begin(), temp.end());
        idx = 0;
        i = si;
        j = sj;
        while(i < n && j < m){
            mat[i][j] = temp[idx];
            i++;
            j++;
            idx++;
        }
    }
    vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {
        int n = mat.size();
        int m = mat[0].size();
        for(int i = 0; i <n; i++){
            solve(i, 0, mat);
        }
        for(int j = 1; j < m; j++){
            solve(0, j, mat);
        }
        return mat;
    }
};

int main(){
    vector<vector<int>> v = {{3,3,1,1},{2,2,1,2},{1,1,1,2}};
    Solution ob;
    print_vector(ob.diagonalSort(v));
}

ইনপুট

[[3,3,1,1],[2,2,1,2],[1,1,1,2]]

আউটপুট

[[1,1,1,1],[1,2,2,2],[1,2,3,3]]
  1. C++-এ The Maze III সমস্যা সমাধান

  2. সি++-এ ম্যাট্রিক্সে সর্বোচ্চ উপাদান বের করার প্রোগ্রাম

  3. সি++-এ সোর্ট এন অ্যারে (Sort an Array)

  4. সি++-এ স্পায়রাল ম্যাট্রিক্স III (Spiral Matrix III)