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