বিষয়বস্তুতে চলুন
উইকিপিডিয়া একটি মুক্ত বিশ্বকোষ

টাওয়ার অব হানয়

উইকিপিডিয়া, মুক্ত বিশ্বকোষ থেকে
এই নিবন্ধে অপর্যাপ্ত তথ্য রয়েছে অনেকেই নিবন্ধটির বিষয়বস্তু সম্পর্কে অপরিচিত দয়া করে উইকিপিডিয়ার রচনাশৈলি অনুসারে, নিবন্ধটির উন্নয়নে অংশ নিন। (সেপ্টেম্বর ২০১৬)
এই নিবন্ধ বা অনুচ্ছেদটিতে মৌলিক গবেষণাযুক্ত উপাদান রয়েছে অথবা যাচাইবিহীনভাবে দাবি করা হয়েছে । দয়া করে উপযুক্ত তথ্যসূত্র এবং উৎস প্রদান করে নিবন্ধটির মানোন্নয়নে সাহায্য করুন। আরও বিস্তারিত জানতে নিবন্ধের আলাপ পাতায় দেখুন। (সেপ্টেম্বর ২০১৬)
এই নিবন্ধটিকে উইকিপিডিয়ার জন্য মানসম্পন্ন অবস্থায় আনতে এর বিষয়বস্তু পুনর্বিন্যস্ত করা প্রয়োজন সম্পাদকদের এই নিবন্ধের মানোন্নয়নে, এর সার্বিক গঠন পরিবর্তনে সাহসী হতে উৎসাহিত করা হচ্ছে। (সেপ্টেম্বর ২০১৬)
একটি চার চাকতি বিশিষ্ট টাওয়ার অব হানয় গেমের অ্যানিমেশন

টাওয়ার অব হানয় (এছাড়াও বলা হয় টাওয়ার অফ ব্রাহ্ম বা লুকাস টাওয়ার[] ) হল এক ধরনের বুদ্ধির খেলা । এ খেলায় তিনটি দন্ড খাড়াভাবে পাশাপাশি রাখা থাকে । এবং ছোট বড় কিছু ডিস্ক বা চাকতি দন্ড এর ভিতর প্রবেশ করান থাকে । এ খেলায় প্রথম দন্ড থেকে তৃতীয় দন্ডে সবগুলো চাকতি আনতে হয় । তবে কিছু নিয়ম পালন করতে হয় । নিয়মগুলো হলো:

 ১. একসাথে একাধিক চাকতি সরানো যাবে না।
 ২. কখনই ছোট চাকতির উপর বড় চাকতি রাখা যাবে না।
 ৩. সবসময় উপরের চাকতি ওঠানো যাবে।

হ্যানয় ধাঁধার টাওয়ার সমাধানের জন্য প্রয়োজনীয় ন্যূনতম সংখ্যা চাল হলো 2 n 1 {\displaystyle 2^{n}-1} {\displaystyle 2^{n}-1} , যেখানে n হল ডিস্কের সংখ্যা।

সমাধান

[সম্পাদনা ]

টাওয়ার অব হানয় সমাধান করা আগে খুব কঠিন ছিল । এখন এটি সমাধান করার জন্য নানা ধরনের এলগরিদম বের হয়েছে । নিচে এর এলগরিদম গুলো নিয়ে আলোচনা করা হলোঃ মনে কর ,১ নং দন্ড টি হলো ১ , ২ নং ২ এবং ৩ নং ৩ জোড় সংখ্যার ক্ষেত্রেঃ

 ১. ১ ও ২ এর মধ্যে একটি সঠিক মুভ কর 
 ২. ১ ও ৩ এর মধ্যে একটি সঠিক মুভ কর
 ৩. ২ ও ৩ এর মধ্যে একটি সঠিক মুভ কর 
 ৪. সম্পূর্ণ না হওয়া পর্যন্ত চালিয়ে যাও 

বিজোড় সংখ্যার ক্ষেত্রেঃ

 ১. ১ ও ৩ এর মধ্যে একটি সঠিক মুভ কর 
 ২. ১ ও ২ এর মধ্যে একটি সঠিক মুভ কর
 ৩. ২ ও ৩ এর মধ্যে একটি সঠিক মুভ কর 
 ৪. সম্পূর্ণ না হওয়া পর্যন্ত চালিয়ে যাও

সুডোকোডে আলগরিদম

[সম্পাদনা ]
 A = [5,4,3,2,1]
 B = []
 C = []
 
 def move(n, source, target, auxiliary):
 <nowiki> </nowiki> if n > 0:
 <nowiki> </nowiki> # move n-1 disks from source to auxiliary, so they are out of the way 
 <nowiki> </nowiki> move(n-1, source, auxiliary, target)
 
 <nowiki> </nowiki> # move the nth disk from source to target
 <nowiki> </nowiki> target.append(source.pop())
 
 <nowiki> </nowiki> # Display our progress
 <nowiki> </nowiki> print(A, B, C, '##############', sep='\n') 
 <nowiki> </nowiki> 
 <nowiki> </nowiki> # move the n-1 disks that we left on auxiliary onto target
 <nowiki> </nowiki> move(n-1, auxiliary, target, source)
 
 <nowiki>#</nowiki> initiate call from source A to target C with auxiliary B 
 move(5, A, C, B)

সি++ কোড

[সম্পাদনা ]
#include<iostream>
usingnamespacestd;
voidtower_hannoi(intdisk,chartower1,chartower2,chartower3)
{
if(disk==1)
{
cout<<"Move disk "<<disk<<" from "<<tower1<<" to "<<tower3<<endl;
}
else
{
tower_hannoi(disk-1,tower1,tower3,tower2);
cout<<"Move disk "<<disk<<" from "<<tower1<<" to "<<tower3<<endl;
tower_hannoi(disk-1,tower2,tower1,tower3);
}
}
intmain()
{
intdisk;
chartower1='A';
chartower2='B';
chartower3='C';
cin>>disk;
tower_hannoi(disk,tower1,tower2,tower3);
return0;
}

পাইথন কোড

[সম্পাদনা ]
def hanoi(n, a='A', b='B', c='C'): 
 if n == 1:
 print('move', a, '-->', c)
 return
 hanoi(n-1, a, c, b)
 print('move', a, '-->', c)
 hanoi(n-1, b, a, c)
print(hanoi(5))

গ্যালারি

[সম্পাদনা ]

তথ্যসূত্র

[সম্পাদনা ]
  1. Hofstadter, Douglas R. (১৯৮৫)। Metamagical themas : questing for the essence of mind and pattern। Internet Archive। New York : Basic Books। আইএসবিএন 978-0-465-04540-2 

বহিঃসংযোগ

[সম্পাদনা ]

http://orbisbux.com/?ref=softimine

AltStyle によって変換されたページ (->オリジナル) /