ডিরেকশন অ্যারে

অনেক সময়ই এমন প্রবলেম থাকে যেখানে বলা হয় তুমি একটা ২-ডি অ্যারের কোনো এক পজিশনে আছো, সেখান থেকে তুমি উপরে-নিচে-বামে-ডানে যেতে পারবে। অথবা দাবার বোর্ডে একটা ঘোড়া আছে, তাকে ৮টা দিকে মুভ করানো যায়, এখন কোনো একটা পজিশনে শর্টেস্ট পাথে যেতে হবে। বিগিনার কোডাররা এ ধরণের প্রবলেমে ছোট্ট একটা ট্রিকস না জানার কারণে কোডের সাইজ বিশাল বানিয়ে ফেলে।

ডিরেকশন অ্যারের ট্রিকসটা যারা যানেনা এ ধরণের প্রবলেমে তাদের কোড হয় অনেকটা এরকম:

এভাবে বারবার একই লাইন লিখতে লিখতে কোডের চেহারা ভয়াবহ হয়ে যায়, আর কাওকে কোড দেখতে দিলে তারও পাগল হবার অবস্থা হয়! ৮ ডিরেকশনে মুভ করা গেলেতো কথাই নেই। সবথেকে বড় সমস্যা হলো এক জায়গায় চেঞ্জ করলে সবজায়গায় চেঞ্জ করতে হয়।

একটা improvement হতে পারে if(nx>=1 && nx<=row && ny>=1 && ny<=col) এই লাইনের কন্ডিশনটা একটা ম্যাক্রো বানিয়ে ফেলা। যেমন:

এখন if(valid) লিখলেই হচ্ছে। এরপরে DO SOMETHING অংশের কাজগুলোও একটা ফাংশন বানিয়ে ফেললে ঝামেলা কিছুটা কমে, এখন খালি ম্যাক্রো বা ফাংশনে চেঞ্জ করলে সব জায়গায় চেঞ্জ হয়ে যাবে। তারপরেও বার বার কন্ডিশন চেক বা ফাংশন কল করতে হচ্ছে আমাদের। এজন্য আমরা ব্যবহার করবো ডিরেকশন অ্যারে। ৪ দিকে মুভ করা যায় এটার অর্থ হলো:

১. current row এর সাথে ১ যোগ এবং current col এর সাথে ০ যোগ
২. current row এর সাথে -১ যোগ এবং current col এর সাথে ০ যোগ
৩. current row এর সাথে ০ যোগ এবং current col এর সাথে ১ যোগ
৪. current row এর সাথে ০ যোগ এবং current col এর সাথে -১ যোগ

তারমানে x,y পজিশন থেকে উপরে যেতে হলে (x,y)+(1,0) করতে হবে, নিচে যেতে (x,y)+(-1,0) করতে হবে, একই ভাবে ডানে-বামে যেতে যোগ করতে হবে শুধু y এর সাথে।

url

আমরা দুটি অ্যারে ডিক্লেয়ার করি এভাবে:

fx[] দিয়ে বুঝাচ্ছি row এর সাথে কত যোগ করবো এবং fy দিয়ে বুঝাচ্ছি y এর সাথে কত যোগ করবো। এবার কাজ খুব সহজ হয়ে গেলো:

তুমি ৮ দিকে যেতে চাইলে অ্যারেটা হবে এরকম:

একটু চিন্তা করলেই তুমি দাবার ঘোড়ার মুভের জন্যেও ডিরেকশন অ্যারে লিখতে পারবে। ৩-ডি তেও এটা কাজ করবে, তখন fx[] নামের আরেকটা অ্যারে লাগবে।
তুমি যদি সম্পূর্ণ কোড চাও তাহলে এই বিএফএস এর কোডটা দেখতে পারো:

এই কোডটা শুধু ডিরেকশন অ্যারের ব্যবহার দেখানোর জন্য, প্রবলেমটার সলিউশন বের করার কাজ তোমার, ট্রি এর ডায়ামিটার বের করতে বলা হয়েছে প্রবলেমটায়।

হ্যাপি কোডিং!


Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
Print Friendly, PDF & Email

ফেসবুকে মন্তব্য

comments

Powered by Facebook Comments

20,905 বার পড়া হয়েছে

12 thoughts on “ডিরেকশন অ্যারে

  1. শাফায়েত ভাই,সেগমেন্ট ট্রী এর ল্যাজি প্রপাগেশন নিয়ে একটি আর্টিকেল লিখলে খুব ভালো হত

  2. ভাইয়া, Hashing নিয়ে একটা Post দিলে ভালো হতো। Uva তে অনেক প্রবলেম আছে যেঁগুলোর tag হোল Hashing… কিন্তু এটা কি জিনিস আমি জানি না। Please, সময় করে একটা Post দিবেন।

  3. ভাই , আমি আপনার দেয়া লিংক -এ গিয়েছিলাম কিন্তু ওখানে hashing নিয়ে লেখা এরকম কোনো tutorial খুজেঁ পাই নি ।

    1. Rabin-Karp Algorithm অংশটা দেখো। এই অ্যালগোরিদমটা হ্যাশিং দিয়ে কাজ করে, এটা হ্যাশিং এর উপর টিউটোরিয়াল না হলেও কিভাবে হ্যাশিং করা হয় জানতে পারবে।

    1. কপি করা কি দরকার, নিজে লিখে ফেলো :)। সমস্যাটা কোথায় আমি ধরতে পারলে ঠিক করে দিবো।

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.