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

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


মান লেযিয়ে একটি ২-ডাইমেনশনাল গ্রিড আছে R সারি এবং C কলামের, আমরা (r0, c0) থেকে শুরু করি এবং পূর্ব দিকে মুখ করে থাকি। গ্রিডের উত্তর-पশ্চিম কোণ প্রথম সারি ও কলামে, দক্ষিণ-পূর্ব কোণ শেষ সারি ও কলামে। আমরা ঘড়ির কাঁটা অনুযায়ী স্পায়রাল আকারে চলে যাব গ্রिडের প্রতিটি পজিশন ভিজিট করতে। গ্রিডের বাউন্ডারি বাইরে চলে গেলেও চলতে থাকব (পরে গ্রিডের বাউন্ডারিতে ফিরে আসতে পারি)। গ্রিডের পজিশনগুলো ভিজিট হওয়ার ক্রম অনুযায়ী কোঅর্ডিনেটের তালিকা রিটার্ন করতে হবে।

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

  • dirr := [[0,1],[1,0],[0,-1],[-1,0]] তৈরি করুন

  • ret ম্যাট্রিক্স, len := 0, dir := 0 তৈরি করুন

  • ret-এ (r0, c0) ইনসার্ট করুন

  • যখন ret.size() < R*C

    • যদি dir == 0 বা dir == 2 হয়, len++ করুন

    • i = 0 থেকে len-1 পর্যন্ত লুপ চালান

      • r0 := r0 + dirr[dir][0], c0 := c0 + dirr[dir][1]

      • যদি r0 ০ থেকে R-এ এবং c0 ০ থেকে C-এ থাকে, ret-এ (r0, c0) ইনসার্ট করুন

    • dir := (dir + 1) % 4

  • ret রিটার্ন করুন

নিচের বাস্তবায়নটি দেখে আরও ভালো বুঝতে পারবেন -

উদাহরণ

#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; } int dirr[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; class Solution {    public:    vector<vector<int>> spiralMatrixIII(int R, int C, int r0, int c0) {       vector < vector <int> > ret;       int len = 0;       int dir = 0;       ret.push_back({r0, c0});       while(ret.size() < R * C){          if(dir == 0 || dir == 2) len++;          for(int i = 0; i < len; i++){             r0 = r0 + dirr[dir][0];             c0 = c0 + dirr[dir][1];             if(r0 < 0 || c0 < 0 || c0 >= C || r0 >= R) continue;             ret.push_back({r0, c0});          }          dir = (dir + 1) % 4;       }       return ret;    } }; main(){    Solution ob;    print_vector(ob.spiralMatrixIII(5,5,1,3)); }

ইনপুট

5 5 1 3

আউটপুট

[[1,3],[1,4],[2,4],[2,3],[2,2],[1,2],[0,2],[0,3],[0,4],[3,4],[3,3],[3,2],[3,1],[2,1],[1,1],[0,1],[4,4],[4,3],[4,2],[4,1],[4,0],[3,0],[2,0],[1,0],[0,0]]

  1. C++-এ The Maze III সমস্যা সমাধান

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

  3. C++-এ বাল্ব স্যুইচার III সমস্যা সমাধান

  4. C++-এ আইডেমপটেন্ট ম্যাট্রিক্স যাচাই করার প্রোগ্রাম