واضح آرشیو وب فارسی:سایت ریسک: t=42491">بررسي مسئله :برج هانوي aira 23 آبان 1384, 18:57سلام من برنامه برج هانوي رو نوشتم ميخواستم بدونم درسته يا نه؟؟ #include <stdio.h> maim() { void transfer(int,char,char,char); int n; printf("how many disks?"); scanf("%d",&n); /*disks*/ printf(" "); transfer(n,`L`,`R`,`C`); /*L=Left,R=Right,C=Center*/ } void transfer(int n,char from,fromchar to,char temp) { if (n>0) { transfer(n-1,from,temp,to); printf("move disk %d from %c to %c ",n,from,to); transfer(n-1,temp,to,from); } return 0; } stranger_in_rain 24 آبان 1384, 21:14به نظرم کد شما تنها یکی از حلقه ها را جابه جا میکند! aira 24 آبان 1384, 22:28ميتونيد يه ذره راهنماييم كنيد تا بتونم برنامشو بنويسم باc++هم اينجوري نوشتم اين چطوره؛اگه ميتونيد راهنماييم كنيد تا برنامشو بنويسم::wink: void Hanoi(int x,int h, int d) { if(x==1) cout<<"move disk from"<<s<<"to"<<d; else{ Hanoi(x-1,s,d,h); cout<<"move disk from"<<s<<"to"<<d; Hanoi(x-1,h,s,d); } توضيح: s:ميله اول h=ميله دوم به عنوان ميله كمكي d=ميله سوم به عنوان ميله مقصد stranger_in_rain 01 آذر 1384, 09:05سلام. ببخشید یه ذره دیر میشه پاسخ های من. 2 مسئله در این جریان دخیل هستش ، سرم خیلی شلوغه !!!! و می ایستم ببینم کسی جواب میده یا نه ... :( خوب یکی از چیزهایی که من در رابطه با برج هانوی میدونم اینه که برای n حلقه، میتوانیم با استفاده از فرمول زیر تعداد مراحلی را که طول میکشد تا کل حلقه ها به میله ی مقصد منتقل شود را پیدا کنیم : H(n)=(2^n)-1 ولی خوب مسئله به این سادگی هم نیست چون این طور که شما نوشتید برنامه رو، همه ی حلقه ها یکسان فرض شده، در حالی که حلقه ها size های گوناگون دارند. پس به این سادگی هم نیست ;) من هنوز رو این مسئله فکر نکردم اما با این نکته هر دو فکر کنیم و حلش کنیم. aira 02 آذر 1384, 06:40ولي تا اونجايي كه به ما گفتن اين مسئله سه حلقه يكسان داره . الگوريتمي كه من نوشتم از يك حاقه به عنوان كمك استفاده كرده و ديسك ها رو بع صورت n-1جابجا ميكنه. جوابشو بزود ميزارم stranger_in_rain 02 آذر 1384, 09:47سلام در مسئله ی کلی هانوی حلقه ها از بزرگ به کوچک روی هم چیده میشوند. به طوری که بزرگترین زیر همه و کوچکترین روی همه قرار دارد ... و هیچ حلقه ی بزرگتری نمیتواند روی حلقه ی کوچک تر از خود قرار بگیرد ... به این عکس نگاه کنید : aira 02 آذر 1384, 11:38بله.اصلاً خود مسئله به همين صورت هست.اينم جوابش:D #include <iostream> #include <cstdlib> #include <conio.h> #include <cmath> typedef char* Peg; void move(Peg A, Peg B); void transfer(size_t N, Peg A, Peg B, Peg C); void get_disk_num(int &iNum); int main() { while(1) { std::cout << " Hanoi Towers Puzzle Solver" << std::endl << std::endl; std::cout << "Enter number of disc on the first peg (enter -1 to quit): "; int iDiskNum, iStepNum; get_disk_num(iDiskNum); if(iDiskNum == -1) { std::cout << "hope you enjoyed using these program!" << std::endl; break; } else { iStepNum = pow(2, iDiskNum) - 1; std::cout << "the shortest solution can be reach in " << iStepNum << " steps" << std::endl; std::cout << "press any key to show the solution..."; getch(); std::cout << std::endl; transfer(iDiskNum, "Peg1", "Peg2", "Peg3"); system("pause"); system("cls"); } } return 0; } // tedade jabejayi diskha void move(Peg A, Peg B) { std::cout << "move top most disc from " << A << " to " << B << std::endl; } // chegonegiye harekate diskhara namayesh midahad void transfer(size_t N, Peg A, Peg B, Peg C) { if(N > 0) { // enteghale avalin N - 1 disk be "B" transfer(N - 1, A, C, B); // enteghale akharin disk be "C" move(A, C); // enteghale dickhaye "B" be"C", transfer(N - 1, B, A, C); } } void get_disk_num(int &iNum) { std::cin >> iNum; if(iNum != -1 && iNum < 1) { std::cout << "please notice that the number of disc needs to be an integer bigger than 0" << std::endl; std::cout << "number of disc on the first peg: "; get_disk_num(iNum); } } بروبچ بياين كپي كنيد حالشو ببريد.يه دعايي هم براي بنده بخونيد J4vad 03 آذر 1385, 14:14دوست عزيز برنامه مشكل داره اصلا اجرا نمي شه ؟!!! maryam1385 22 مهر 1386, 10:16برج هانوي
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 545]