n-queen الگوریتم 

مقدمه:

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

در اینجا هدف استفاده از روش عقبگرد،رسیدن به جواب مساله وزیرها

می باشد.به طوری که هیچ دو وزیری در یک صفحه شطرنج همدیگر را گارد ندهند.

 

توضیح و تشریح مساله:

1)تعریف مساله:

تعیین جوابهای مساله،یعنی جاهایی که چند وزیر می توانند در یک صفحه شطرنج

 قرار بگیرند ،به صورتی که هیچ کدام همدیگر را گارد ندهند یا به عبارتی همدیگر را تهدید نکنند.(یا به عبارتی هیچ دو وزیری در یک سطر یا ستون قرار نگیرند.)

که تعداد وزیر ها و صفحه شطرنج می باشد.N2)ورودی های مساله:

 

3)خروجی :مکانهای امنی که وزیر ها می توانند در انها قرار بگیرند.

خروجی برنامه در نهایت به صورت زیر می باشد:

ارایه ای از اعدا صحیح که از یک تا عددی که در ورودی مشخص می شود،موقعیت وزیر ها را در صفحات شطرنج مشخص می کند.

 

الگوریتم کلی برنامه:

تابع بکار رفته د الگوریتم و کاربرد آنها:

Promising():

کار بررسی امید بخش بودن یا نبودن را انجام می دهد.وقتی مقدار صفر را برمی گرداند که یک گره و اجداد آن ،وزیرها را در یک سطر یا ستون قرار دهند.هر گره توسط یک زوج مرتب نگه داشته می شود.

 

تابع دوم:

Queens():

فراخوانی تابع امید بخش و گرفتن نتیجه از ان تابع و در صورت امید بخش بودن محاسبه جواب و بازگرداندن آن به خروجی برنامه.

 

Void queens (index i)

{

 Index  j;

If ( promising(i) )

 

  if ( i == n )

        cout<

  else

 

       for ( j=1 ;j<=n ;j++)

       col[i+1]=j;   //see if queen in (i+1) st row

       queens(i+1);

       }

 

}

 

bool promising (index i)

{

 index k;

 bool change ;

 k=1;

 change:=true;

 while (k

 {

  if (col[i] == col[k] || abs (col[i]-col[k]) == i-k)

        change =false;

  k++;

  }

  return change;{

 

حل مساله:

یافتن نقاط امن برا وزیر ها

روشی که در اینجا استفاده می شود،استفاده از درخت های پیمایش و استفاده از تکنیک عقبگرد می باشد.

هدف برنامه حل مساله به کمک روش عقبگرد می باشد.

مراحل زیر باید انجام شود:

1)رسم درخت فضای حالت وزیر ها

2) تعیین حل های کاندید

3) مقایسه و در صورت عدم جواب برگشت به روش عقبگرد

 

توضیح الگوریتم:

برای تعیین حل ها،همه حل های کاندید را به ترتیب با شروع از مسیری که در منتهی الیه سمت چپ قرار دارد بررسی می کنیم(هر مسیر از ریشه به برگ).چند مسیر اول به صورت زیر چک می شوند:

 

[<1,1>,<2,1>,<3,1>,<4,1>]

[<1,1>,<2,1>,<3,1>,<4,2>]

[<1,1>,<2,1>,<3,1>,<4,3>]

[<1,1>,<2,1>,<3,1>,<4,4>]

[<1,1>,<2,1>,<3,1>,<4,1>]

 

 

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

عقبگرد روالی است که توسط آن،پس از تعیین این که گرهی منجر به بن بست می شود،به گره والد برگردد (عقبگرد می کند)و جست و جو را در فرزند دیگری از گره ادامه می دهیم.یک گره را غیر امید بخش گوییم اگر هنگام ملاقات گره مشخص شود که احتمالا منجر به حل نمی شود،در غیر این صورت امید بخش است.

ملاقات یک گره در وهله اول شامل تعیین امید بخش بودن است،اگر امید بخش بود آن را  حل میکنیم و به خروجی برمی گردانیم.

 تهیه کننده:

زانا کهنه پوشی

منابع:

1)کتاب طراحی الگوریتم ها تالیف دکتر فراهی

2)کتاب طراحی الوریتم ها تالیف ریچارد نیپولیتان و کیومرث نعیمی پور

3)سایت دایره المعارف انلاین ویکی پیدیا

www.wekipedia.com

4)فرم برنامه نویس

www.Barnamenevis.org