امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
برجهاي هانوي
نویسنده پیام
mhzza آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 1
تاریخ عضویت: فروردین ۱۳۸۹

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #1
برجهاي هانوي
در مورد برجهاي هانوي و برنامه برجهاي هانوي كسي ميتونه كمكم كنه ( الگوريتم برجهاي هانوي )

ممنون ميشم
(۲۸-فروردین-۱۳۸۹, ۱۴:۳۳:۳۸)mhzza نوشته است: در مورد برجهاي هانوي و برنامه برجهاي هانوي كسي ميتونه كمكم كنه ( الگوريتم برجهاي هانوي )

ممنون ميشم
(آخرین ویرایش در این ارسال: ۲۸-فروردین-۱۳۸۹, ۱۴:۳۴:۱۷، توسط mhzza.)
۲۸-فروردین-۱۳۸۹, ۱۴:۳۳:۳۸
ارسال‌ها
پاسخ
The.Ghost غایب
مدیر بازنشسته
*****

ارسال‌ها: 461
موضوع‌ها: 201
تاریخ عضویت: مهر ۱۳۸۸

تشکرها : 674
( 354 تشکر در 158 ارسال )
ارسال: #2
RE: برجهاي هانوي
من یک برنامه به زبان پاسکال دارم(lord_viper)، شاید کمکت کند.
البته این الگوریتم به صورت باز گشتی کار می کند.
کد:
program hanoy;
var
n:integer;
procedure tower(fromp,top,help:char;n:integer) ;
begin
if n=1 then
writeln('move disk 1 form ',fromp,' to ',top)
else
begin
tower(fromp,help,top,n-1);
writeln('move disk ',n,' from ',fromp,' to ',top);
tower(help,top,fromp,n-1);
end
end;
Begin
write('Enter number of disks : ');
readln(n);
tower('A','B','C',n);
readln;
End.

Assembly Language 039

(آخرین ویرایش در این ارسال: ۲۸-فروردین-۱۳۸۹, ۱۷:۴۲:۲۶، توسط The.Ghost.)
۲۸-فروردین-۱۳۸۹, ۱۷:۴۱:۲۳
ارسال‌ها
پاسخ
اشک آفلاین
كاربر دو ستاره
**

ارسال‌ها: 108
موضوع‌ها: 14
تاریخ عضویت: آبان ۱۳۸۸

تشکرها : 758
( 532 تشکر در 136 ارسال )
ارسال: #3
RE: برجهاي هانوي
سرچ زدن خیلی سخته؟

http://iranled.com/forum/showthread.php?tid=16740

زمانی که به پایان رسیدی بدان شروعی دوباره در کام تولد است.Wink
۲۸-فروردین-۱۳۸۹, ۱۸:۰۱:۳۸
ارسال‌ها
پاسخ
تشکر شده توسط : The.Ghost
moam آفلاین
كاربر دو ستاره
**

ارسال‌ها: 110
موضوع‌ها: 12
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 71
( 222 تشکر در 92 ارسال )
ارسال: #4
RE: برجهاي هانوي
سلام
اين قطعه كد هانوي بهينه هم هست
کد:
* hanoi.cpp solves the Towers of Hanoi puzzle recursively.
*
* Input:  numDisks, the number of disks to be moved
* Output: a sequence of moves that solve the puzzle */

#include <iostream.h>
#include <conio.h>


void Move(int n, char source, char destination, char spare);
int count = 0;

int main()
{
  const char PEG1 = 'A',            // the three pegs
             PEG2 = 'B',
             PEG3 = 'C';

  cout << "This program solves the Hanoi Towers puzzle.\n\n";

  cout << "Enter the number of disks: ";
  int numDisks;                     // the number of disks to be moved
  cin >> numDisks;
  cout << endl;

  Move(numDisks, PEG1, PEG2, PEG3); // the solution
// getch();
  return 0;

}

/* Move is a recursive function to solve the
* Towers of Hanoi puzzle.
*
*  Receive: n, the number of disks to be moved;
*           source, peg containing disk to move
*           destination, peg where to move disk
*           spare, peg to store disks temporarily,
*  Output:  A message describing the move
**************************************************/

void Move(int n,
          char source, char destination, char spare)
{
  if (n <= 1)                      // anchor
cout << "Move the top disk from " << source
         << " to " << destination << endl;
  else
  {                                // inductive case
    Move(n-1, source, spare, destination);
    Move(1, source, destination, spare);
    Move(n-1, spare, destination, source);
  }
۰۵-اردیبهشت-۱۳۸۹, ۰۳:۱۰:۵۳
ارسال‌ها
پاسخ
آتنا آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: آبان ۱۳۸۹

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #5
RE: برجهاي هانوي
خواهشا در مورد حل اين برجهاي هانوي توضيح بدهيد
ببخشيد مي تونيد اين مسئله رو براي من توضيح بديد چطوري حل ميشه
بسط تيلور براي cosx
(آخرین ویرایش در این ارسال: ۱۳-آبان-۱۳۸۹, ۱۹:۲۲:۵۰، توسط آتنا.)
۱۳-آبان-۱۳۸۹, ۱۹:۲۱:۲۱
ارسال‌ها
پاسخ
اشک آفلاین
كاربر دو ستاره
**

ارسال‌ها: 108
موضوع‌ها: 14
تاریخ عضویت: آبان ۱۳۸۸

تشکرها : 758
( 532 تشکر در 136 ارسال )
ارسال: #6
RE: برجهاي هانوي
با سلام.این الگوریتم میخواد به شما کمک کنه تا دیسکهایی رو که دارید رو در میله ی مقصد©با ترتیب بزرگ به کوچک از پایین به بالا قرار بدید.دیفالت ما اینه که این دیسکها به همون ترتیب در میله ی مبدأ(A)قرار دارند.حالا باید دیسکها رو طوری جابجا کنیم که مطلوب ظاهر بشه.البته با کمترین جابجایی.n تعداد دیسکهاست.تعداد جابجاییهای بهینه از رابطه ی 2 به توان این وریایبل منهای 1 بدست میاد.کافیه بجای این متغیر عدد 3 رو جایگزین کرده و الگوریتم رو استپ به استپ اجرا کنید.جابجاییها به شرح زیر خواهند بود.
کد php:
A to B
A to C
C to B
A to C
B to A
B to C
A to C 

کد php:
void Hanoi(n,A,B,C)
{
if(
n==1)
mov disk  #n from A to C
else
{
Hanoi(n-1,A,C,B)
mov disk  #n from A to C
Hanoi(n-1,B,A,C)
}


زمانی که به پایان رسیدی بدان شروعی دوباره در کام تولد است.Wink
۱۶-آبان-۱۳۸۹, ۰۱:۲۳:۴۰
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000
Asdolla آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: اسفند ۱۳۹۰

تشکرها : 1
( 0 تشکر در 0 ارسال )
ارسال: #7
RE: برجهاي هانوي
از همه معذرت می خوام که این پست قدیمی رو بالا آوردم ولی چون این مشکل خودم بوده و هیچ جا جوابشو پیدا نکردم,فکر کردم راه حلی که خودم پیدا کردم رو اینجا بنویسم تا آیندگان استفاده کنن!
تو همه ی کتاب ها و منابع(البته تا اونجایی که من دیدم!)فقط راه حل برج های هانوی گفته شده و مرتبه ی الگوریتمش تحلیل شده که این الگوریتم از مرتبه ی n2 هستش.
دلیل این که این راه حل این جوری هست رو توضیح می دم:
فرض کنید سه حلقه در برج a داریم و به کمک برج b می خوایم اون ها رو در برج c قرار بدیم.اگه از آخر به اول نگاه کنیم(روش معمول برای طراحی الگوریتم های بازگشتی)باید حلقه ی 3 در برج c باشه که حلقه های 1و2 رو روش قرار بدیم.برای این کار اول باید حلقه های 1و2 رو از برج a به برج b انتقال بدیم تا حرکت حلقه ی 3 امکان پذیر باشه.
پس الان صورت مساله شد این:
دو حلقه در برج a داریم که می خوایم با کمک برج c اون ها رو در برج b قرار بدیم.برای این کار اول باید حلقه ی 1 رو در برج c بزاریم و بعد حلقه ی 2 رو بزاریم تو برج b و در نهایت حلقه ی 1 رو بزاریم روی حلقه ی 2.وقتی این کار انجام شد حلقه ی 3 رو (که الان روش خالیه) از برج a به برج c(که الان هیچ حلقه ای توش نیست) انتقال می دیم. و بازهم صورت مساله به این شکل درمیاد:
دو حلقه در برج b داریم که می خوایم به کمک برج a اون ها رو در برج c قرار بدیم.انتقال دو حلقه رو قبلا توضیح دادم.با حل این مساله ی فرعی , مساله ی اصلی حل میشه.
اگه مساله رو برای 4 حلقه در نظر بگیریم باید اول حلقه های 1و2و3 رو در برج b بزاریم تا بتونیم حلقه ی 4 رو بزاریم سر جاش.وهمین طور الی آخر.
اگه یکم به توضیحات بالا دقت کنید متوجه میشید که اگه برج s مبدا باشه , برج d مقصد باشه و برج t کمکی باشه, اگه بخوایم تعدادی فرد حلقه رو جا به جا کنیم باید اولین حلقه رو از s به d جابه جا کنیم.و اگه تعداد حلقه هایی که باید جابه جا شن زوج باشه باید اولین حلقه رو از s به t جابه جا کنیم.
توی مثال بالا وقتی می خواستیم سه تا حلقه رو از a به c جابه جا کنیم اولین حلقه رو گذاشتیم توی c و وقتی خواستیم دوتا حلقه رو از b به c منتقل کنیم , اولین حلقه رو گذاشتیم توی a.
دلیل این کدهای بازگشتی که میبینید چیزی جز این نیست.
موفق باشید!
۱۷-اسفند-۱۳۹۰, ۱۴:۳۷:۲۹
ارسال‌ها
پاسخ
اهورا منش آفلاین
تازه وارد

ارسال‌ها: 13
موضوع‌ها: 0
تاریخ عضویت: اردیبهشت ۱۳۹۳

تشکرها : 0
( 14 تشکر در 9 ارسال )
ارسال: #8
RE: برجهاي هانوي
سلا.
برنامه هانوی باvb هست میگذارم شایدکمکت کنه.
hanoi


فایل‌(های) پیوست شده
.zip   Hanoi.zip (اندازه: 7.88 KB / تعداد دفعات دریافت: 49)
(آخرین ویرایش در این ارسال: ۲۵-اردیبهشت-۱۳۹۳, ۰۱:۰۸:۳۳، توسط babyy.)
۲۵-اردیبهشت-۱۳۹۳, ۰۰:۴۸:۱۰
ارسال‌ها
پاسخ
تشکر شده توسط : babyy


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 3 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS