হ্যানয়ের টাওয়ার একটি ধাঁধার সমস্যা৷ যেখানে আমাদের তিনটি স্ট্যান্ড এবং এন ডিস্ক রয়েছে। প্রাথমিকভাবে, ডিস্কগুলি প্রথম স্ট্যান্ডে স্থাপন করা হয়। আমাদের তৃতীয় বা গন্তব্য স্ট্যান্ডে ডিস্ক স্থাপন করতে হবে, দ্বিতীয় বা সহায়ক স্ট্যান্ডটি সাহায্যকারী স্ট্যান্ড হিসাবে ব্যবহার করা যেতে পারে।
- কিন্তু কিছু নিয়ম মেনে চলতে হবে।
- আমরা প্রতিটি আন্দোলনের জন্য শুধুমাত্র একটি ডিস্ক স্থানান্তর করতে পারি।
- স্ট্যান্ড থেকে শুধুমাত্র সর্বোচ্চ ডিস্ক তোলা যায়।
- কোনও বড় ডিস্ক ছোট ডিস্কের উপরে রাখা হবে না।
এই সমস্যাটি পুনরাবৃত্তির মাধ্যমে সহজেই সমাধান করা যেতে পারে। প্রথমে, রিকারশন ব্যবহার করে উপরের (n-1) ডিস্কগুলি উৎস থেকে সহায়ক স্ট্যান্ডে স্থাপন করা হয়, তারপরে উৎস থেকে গন্তব্যে শেষ ডিস্কটি স্থাপন করা হয়, তারপরে আবার (n-1) ডিস্কটি অক্জিলিয়ারী স্ট্যান্ড থেকে গন্তব্য স্ট্যান্ড বাই রিকারশনে স্থাপন করা হয়।
ইনপুট এবং আউটপুট
ইনপুট:ডিস্কের সংখ্যা:3আউটপুট:1। A থেকে C2 তে ডিস্ক 1 সরান। A থেকে B3 তে ডিস্ক 2 সরান। ডিস্ক 1কে C থেকে B4 এ সরান। A থেকে C5 এ ডিস্ক 3 সরান। B থেকে A6 তে ডিস্ক 1 সরান। B থেকে C7 তে ডিস্ক 2 সরান। ডিস্ক 1 A থেকে C এ সরান
অ্যালগরিদম
toh(n, s, a, d)
ইনপুট: ডিস্কের সংখ্যা, উৎস, সহায়ক, গন্তব্য।
আউটপুট: সঠিক নিয়ম বজায় রেখে উৎস থেকে গন্তব্যে ডিস্ক সরানোর পদক্ষেপ।
শুরু করুন যদি n =1 হয়, তারপর ডিসপ্লে ডিস্ক সরান s থেকে d toh(n-1, s, d, a) ডিসপ্লে মুভ ডিস্ক s থেকে d toh(n-1, a, s, d)Endপ্রে>উদাহরণ
#includeনেমস্পেস ব্যবহার করে std;void TOH(int n, char s, char a, char d) { static int count =0; //স্টোর সংখ্যার সংখ্যা যদি(n ==1) { গণনা++; cout <<গণনা<<"। ডিস্ক " < > n; TOH(n, 'A', 'B', 'C');} আউটপুট
ডিস্কের সংখ্যা লিখুন:31। ডিস্ক 1কে A থেকে C2 এ সরান। A থেকে B3 তে ডিস্ক 2 সরান। ডিস্ক 1কে C থেকে B4 এ সরান। A থেকে C5 এ ডিস্ক 3 সরান। B থেকে A6 তে ডিস্ক 1 সরান। B থেকে C7 তে ডিস্ক 2 সরান। ডিস্ক 1 A থেকে C এ সরান