কম্পিউটার

C++ এ স্পাইরাল ম্যাট্রিক্স III


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

এর মত হয়

C++ এ স্পাইরাল ম্যাট্রিক্স III

তারপর তীরটি পথ হবে।

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

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

  • একটি ম্যাট্রিক্স ret, len :=0, dir :=0

    তৈরি করুন
  • সন্নিবেশ (r0, c0) ret

  • যখন ret এর আকার

    • যদি dir =0 বা dir =2, তাহলে লেন 1 দ্বারা বাড়ান

    • আমি 0 থেকে লেন – 1

      পরিসরে
      • r0 :=r0 + dirr[dir, 0], c0 :=c0 + dirr[dir, 1]

      • যদি 0 থেকে R রেঞ্জে r0 এবং 0 থেকে C রেঞ্জে c0 হয়, তাহলে পরবর্তী পুনরাবৃত্তির জন্য যান

      • সন্নিবেশ (r0, c0) ret

    • dir :=(dir + 1) mod 4

  • রিটার্ন রিটার্ন

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

উদাহরণ

#include  namespace ব্যবহার করে std;void print_vector(vector> v){ cout <<"["; for(int i =0; i> spiralMatrixIII(int R, int C, int r0, int c0) { ভেক্টর <ভেক্টর > ret; int len ​​=0; int dir =0; ret.push_back({r0, c0}); while(ret.size() =C || r0>=R) চালিয়ে যান; ret.push_back({r0, c0}); } dir =(dir + 1) % 4; } রিটার্ন রিটার্ন; }};প্রধান(){সমাধান ob; print_vector(ob.spiralMatrixIII(5,5,1,3));}

ইনপুট

5513

আউটপুট

<পূর্ব>[[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++ এ ধাঁধা III

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

  3. C++ এ বাল্ব সুইচার III

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