
حل برج های هانوی ، آموزش الگوریتم و کد
مساله ی برج های هانوی (towers of Hanoi) از مساله های معروف در زمینه ی اگوریتم های بازگشتی است که در آن تعدادی دیسک را باید ازمیله ای به میله ی دیگر منتقل کرد.
شرایط اولیه: ۳ میله که یکی از آنها حاوی تعدادی دیسک است که از پایین به بالا از بزرگ به کوچک قرار گرفته اند.
مسآله: همه ی دیسک ها را باید به یک میله ی خالی منتقل کنید.
قوانین:
۱-هنگام حرکت دادن دیسکها هیچ دیسکی روی دیسک کوچکتر از خود قرار نگیرد.
۲-درهر بار حرکت دادن دیسک ها نمیتوان بیش از یک دیسک را منتقل کرد.
حل: فرض کنیم n دیسک داریم و میله ها را origin , middle , destination مینامیم که ابتدا دیسکها در origin قرار دارند وباید به destination منتقل شوند. فرض کنیم (H(n تابعی باشد که این کار را انجام میدهد n دیسک را به روش زیر منتقل میکنیم:
۱-با(H(n-1 ابتدا n-1 دیسک بالایی از میله ی origin را به middle منتقل میکنیم.
۲-آخرین دیسک موجود در origin را به destination منتقل میکنیم.
۳-با(H(n-1 درآخر n-1 دیسک موجود در میله ی origin را به destination منتقل میکنیم.
پس داریم:(H(n)=H(n-1)+1+H(n-1 یعنی H(n)=2H(n-1)+1
کد این مساله به زبان سی پلاس پلاس( ++C):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include "stdafx.h" #include <iostream> using namespace std; void hanoi(int disk, int or, int des) { //or=origion, des=destination int mid=6-(or+des); if(disk==1) { cout<<or<<"->"<<des<<endl; } else { hanoi(disk-1, or, mid); cout<<or<<"->"<<des<<endl; hanoi(disk-1,mid , des); } } int main(void) { int dno,or,des; //number of disks, origion, destination cout<<"\tHanoi towers, tower 1, tower 2, tower 3 (inputs are numbers 1,2 and 3): "<<endl<<endl; //avoiding possible mistakes while entering inputs by using do-while loops do { cout<<"Enter the number of disks: "; cin>>dno; } while(dno<1); do{ cout<<"Enter the origion: "; cin>>or; } while(or>3 || or<1); do { cout<<"Enter the destination: "; cin>>des; } while(des>3 || des<1 || des==or); hanoi(dno,or,des); cin.get(); return 0; } |
جالب است بدانیم که جواب تابع بازگشتی در این مساله برابر است با: hanoi(n)=(2^n)-1 یعنی تابع به اندازه ی hanoi(n)=(2^n)-1 فراخوانی میشود, پس با انجام
همین تعداد حرکت دیسکها از origin به destination منتقل میشوند.
با Dew اجرا میشه خط اول پاک کنید به جای متغییر or هرجا داشتید مثلا ori بذارید درست میشه
خواهش میکنم بیشتر راجع به درس برنامه نویسی پیشرفته سوال و حل تمرین بذارید..من با برنامه نویسی مشکل دارم شدید..ممنون
ایا کسی open gl کار کرده و طراحی اسم با اسپیلاین (توابع بیزیه) رو بلده؟؟؟
کد مشابه و ساده تر!!!
از چه برنامه ای برای اجراش استفاده کنیم؟
با تشکر
ویژوال استادیو مایکروسافت
باکدبلاک هم میشه برنامه سی پلاس پلاس نوشت واجراکرد
بله میشه تو codeblocks برنامه سی پلاس پلاس رو نوشت و اجرا کرد.
به این لینک مراجعه کنید:
http://wiki.codeblocks.org/index.php/Creating_a_new_project
دقیقا کدوم خط خطا می ده ؟ کد اون خط بذار و متن خطا رو هم همین طور.
سلام…
چرا استفاده نکنم ؟
ببخشید اینا میپرسم ولی سینتکس چیه؟میشه یه توضیح بدید…
شرمنده
اون تعریف خط اول برای ویژوال استادیو است.
از استاندارد های بروز تر استفاده کنید
سینتکس : نحوه نوشتن کد در زبان های مختلف
سلام خسته نباشید
آقای دلیرانی ببخشید کد برج هانوی به زبن سی شارپ یا سی پلاس پلاس؟
من میخوام اجراش را در dev c++بگیرم ولی اجرا نمیده در خط اول و خط چهارم خطا میده…
اگه بخوام به زبان سی شارپ بنویسم چیکار باید کنم؟
ممنون اگه کمکم کنید…
اکیدا توصیه میکنم از dev استفاده نکنید
اما برای کامپایل خط اول را حذف کنید
برای c# کافیست سینتکس آن را عوض کنید
سلام خسته نباشید اگه بخواهیم برج هانوی را بصورت گرافیکی بنویسیم باید چیکار کنیم با c#؟؟؟؟؟؟؟؟؟؟؟؟؟
میشه کمکم کنید
۱دنیا ممنون
سلام
ابزار های زیادی موجود هستند !
C#
QT
OpenGl
microsoft visual c++
…