loading...
برنامه نویسی
سجاد بازدید : 3590 پنجشنبه 15 دی 1390 نظرات (0)

مسئله برج هانوی به افسانه ای از هندوستان بازمی گردد. در یکی از معابد هندوستان سه ستون وجود داشته که در یکی 64 عدد حلقه به ترتیب قطرشان و جود داشته است. موبدان بر این باور بوده اند که هر گاه توانستند تمام این 64 حلقه را به به ستون سوم ببرند ، عمر جهان پیدا شده و دنیا به پایان خواهد رسید. بتا بر این موبدان دست به کار شدند و شروع به انتقال دادن حلقه ها کردند. البته در این انتقال باید:

1- در هر جابجایی تنها یک حلقه را جابجا کنند

2- حلقه بزرگتر روی کوچکتر قرار نگیرد.

این سوژه جالب موضوع بحث ریاضی دانان شد و بعد اهالی علم کامپیوتر به این فکر افتادند که این بازی را پیاده سازی کنند.

برج هانوی , معمایی است که از سه میله و N دیسک با اندازه های متفاوت . فرض شود که اگر دیسکی روی یک میله باشد , فقط دیسکی که قطر آن کوچکتر است می تواند بالای آن قرار گیرد مسئله چنین است که هر بار فقط یک دیسک انتقال یابد .


را حل : این مسئله با استفاده از یک الگوریتم باز گشتی حل می شود .

-اگر فقط یک دیسک باشد آنگاه آن را به میله مورد نظر انتقال می دهیم .

-اگر n > 1 باشد ; برای این کار n-1 دیسک بالای میله 1 را به میله 2 انتقال می دهیم . حالا دیسک پایینی میله 1 را ثابت باقی می ماند . حال دیسک باقیمانده در در میله 1 را به میله 3 منتقل میکنیم . سرانجام بار دیگر بصورت بازگشتی الگوریتم را فرا خانده تا n - 1 دیسک میله دو را به 3 منتقل کند .

اکنون موفق شدیم n دیسک را از میله 1 به 3 منقل کنیم .


در ++C


// hanoiTowers.cpp : main project file.

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

using namespace std;

void tower(int,char,char,char); /*prototype*/

int main()

{

int ndisk;

printf("\n Enter number of disks <<<::: ");

scanf("%d",&ndisk);

tower(ndisk,'A','B','C'); /*Calling Function*/

getch();

return 0;

} /* End of program */

/********************************************/

// src = Source | aux = Auxiliry | dest = Destination

void tower(int topN, char src,char aux,char dest)

{

if(topN == 1)

{

printf("\n Disk 1 from %c to %c ",src,dest);

}

else

{

tower(topN-1,src,dest,aux); //src to aux

printf("\n Disk %d from %c to %c ",topN,src,dest);

tower(topN-1,aux,src,dest); //aux to dest

}

}


نوشته شده با:
Visual C++ 2010
ارسال نظر برای این مطلب

کد امنیتی رفرش
اطلاعات کاربری
  • فراموشی رمز عبور؟
  • نویسندگان
    آمار سایت
  • کل مطالب : 33
  • کل نظرات : 18
  • افراد آنلاین : 2
  • تعداد اعضا : 446
  • آی پی امروز : 27
  • آی پی دیروز : 27
  • بازدید امروز : 29
  • باردید دیروز : 43
  • گوگل امروز : 0
  • گوگل دیروز : 3
  • بازدید هفته : 72
  • بازدید ماه : 602
  • بازدید سال : 3,911
  • بازدید کلی : 141,829