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

নাম্বার লিংক গেম: C/C++-তে পাজল জেনারেশন অ্যালগরিদম


গেম − একটি n × n স্কয়ারের অ্যারে কল্পনা করুন। এইগুলোর মধ্যে, কিছু স্কয়ার খালি, কিছু সলিড, এবং কিছু নন-সলিড স্কয়ার ১, ২, ৩, ... দিয়ে মার্ক করা। প্রতিটি ইন্টিজার বোর্ডে এক্সাক্টলি দুটি আলাদা স্কয়ার আক্যুপাই করে। প্লেয়ারের টাস্ক হল প্রতিটি ইন্টিজারের দুটি আওয়ারেন্সকে বোর্ডে কানেক্ট করা একটি সিম্পল পাথ দিয়ে যেটি শুধু হরিজন্টাল এবং ভার্টিক্যাল মুভমেন্ট ব্যবহার করে। দুটি ভিন্ন পাথ একে অপরের সাথে ইন্টারসেক্ট করতে পারবে না। কোনো পাথ যেকোনো সলিড স্কয়ার ইনক্লুড করতে পারবে না (সলিড স্কয়ার কোনো পാതে আপনার করতে পারবে না)। অবশেষে, সকল নন-সলিড স্কয়ার পাথ দিয়ে ফিল্ড হতে হবে।

অ্যালগরিদম − একটি বৈধ র‍্যান্ডম পাজল কনস্ট্রাক্ট করার জন্য দেয়া বোর্ড সাইজ n × n-এ, আমরা প্রথমে র‍্যান্ডম সিম্পল মিউচুয়ালি নন-ইন্টারসেক্টিং পাথ বোর্ডে প্রডিউস করি। যদি কিছু আইসোলেটেড স্কয়ার সকল জেনারেটেড পাথের বাইরে থাকে, এই আইসোলেটেড স্কয়ারগুলোকে সলিড (ফরবিডেন) হিসেবে মার্ক করুন। এরপর পাথের এন্ডপয়েন্টগুলো এবং সলিড স্কয়ারগুলোর লিস্ট পাজল হিসেবে দিন।

এভাবেই আমরা প্রথমে একটি সমাধান প্রডিউস করি, এবং তারপর সমাধান থেকে পাজল বের করি। পাথগুলো এবং সলিড স্কয়ারগুলো n × n বোর্ডকে পার্টিশন বা বিভক্ত করে। আমরা এই পার্টিশন প্রডিউস করতে यूनিয়ন-ফাইন্ড ডেটা স্ট্রাকচার ইমপ্লিমেন্ট করি। ডেটা স্ট্রাকচারটি বোর্ডে n² স্কয়ারের সেটের সাবসেটগুলো ডিল করে।

PseudoCode

  • বোর্ডে (a, b) এবং (c, d) স্কয়ার র‍্যান্ডমলি লোকেট করুন যাতে −

    • (a, b) এবং (c, d) একে অপরের নেighbour, এবং

    • নতুন পথের শুরুতে (a, b) এবং (c, d))。

  • (a, b) এবং (c, d) ধারণকারী দুটি ইউনিয়ন-ফাইন্ড ট্রি ইউনিয়ন করুন।

  • ততক্ষণ রিপিট করুন যতক্ষণ কারেন্ট পাথ এক্সটেন্ড করা যায় −

    • (a, b) = (c, d) রিনেম করুন।

  • (a, b)-এর একটি র‍্যান্ডম নেighbouring স্কয়ার (c, d) লোকেট করুন যাতে −

    • (c, d) কোনো পাথে بيلঙ করে না (কারেন্টটি সহ)

    • (c, d)-এর একমাত্র নেighbour পার্শিয়ালি কনস্ট্রাক্টেড কারেন্ট পাথে (a, b)।

  • যদি এমন কোনো নেighbour (c, d) না পাওয়া যায়, পাথ আর এক্সটেন্ড করা যায় না, তাই লুপ ব্রেক করুন

  • অন্যথায়, (a, b) এবং (c, d) যেসব ইউনিয়ন-ফাইন্ড ট্রিতে বেলঙ করে তাদের ইউনিয়ন করুন।

  • নতুন পাথের শুরু এবং শেষের দুটি স্কয়ারের এন্ডপয়েন্ট ফ্ল্যাগ সেট করুন।

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


  1. AA ট্রি: C/C++-তে ব্যালেন্সড ট্রি ডেটা স্ট্রাকচার

  2. সি/সি++ প্রোগ্রামে ট্রায়্যাঙ্গুলার ম্যাচস্টিক নম্বর বের করা

  3. সি/সি++ প্রোগ্রাম: nth ক্যাটালান সংখ্যা (Catalan Number)

  4. সি++-এ আয়তক্ষেত্রে বর্গের সংখ্যা গণনা