PDA

View Full Version : 8وزیز



sara_m
شنبه 07 خرداد 1384, 10:34 صبح
علیک سلام
من دنبال برنامه یا الگوریتم 8 وزیر هستم.
کمکم کنید
یه دنیا تشکر :oops:

rezaTavak
شنبه 07 خرداد 1384, 12:25 عصر
http://javascript.internet.com/games/eightqueens.html

omid_Ahmadi
شنبه 07 خرداد 1384, 21:21 عصر
این سورس برنامه N وزیر به صورت Recursive است.
:موفق:

مهدی
یک شنبه 08 خرداد 1384, 16:13 عصر
یه چیز خیلی جالبی که بعد از کلی جستجو فهمیدم این بود که این مساله راه greedy داره!
اینم از برنامش که بهترین Order ممکن رو داره! :mrgreen: O(n)

برای من که خیلی جالب بود. شما نظرتون چیه؟


//---------------------------------------
// Problem : N-Queen
// Coded by: Mahdi Hashemi nezhad
//---------------------------------------
#include <iostream.h>

void main()
{
int i,r,n,l,nn;
cout<<"Enter number of queens:";
cin>>n;
while(n>=4){
r=n%6;
if(r!=2&&r!=3){ //0,1,4,5
l=n/2;
for(i=1;i<=l;i++)cout<<"("<<i<<","<<2*i<<")";
for(i=l+1;i<=n;i++)cout<<"("<<i<<","<<2*(i-l)-1<<")";
}else{ //2,3
l=n/2;
nn=l*2;
cout<<"(1,"<<nn-3<<")";
for(i=2;i<l-1;i++)cout<<"("<<i<<","<<2*i-1<<")";
cout<<"("<<l-1<<",1)";
cout<<"("<<l<<","<<nn-1<<")";
cout<<"("<<l+1<<",2)";
cout<<"("<<l+2<<","<<nn<<")";
for(i=3;i<l;i++)cout<<"("<<i+l<<","<<2*i<<")";
cout<<"("<<nn<<",4)";
if(r==3)cout<<"("<<n<<","<<n<<")";
}
cout<<endl;
cin>>n;
}
}
//------------

hamed jalili
دوشنبه 09 خرداد 1384, 11:50 صبح
برای این برنامه شما می توانید 8 تابع درون یک کلاس تعریف کنید که هر تابع وظیفه اش انجام حرکات مربوت به هر وزیر می باشد .ابتدا یک آرایه 8در8 به عنوان بر شطرنجتان تعریف کنید سپس یک تابع دیگر برای پیدا کردن خانه هایی را وزیر های بعدی نمیتوانند بروند و علامت گذاری آنها سپس تابع مربوط به حرکات وزیرها را فراخوانی کنید از وزیر اول تا آخر اولین خانه را که برای هر وزیر پیدا کرد وزیر را در آن خانه قرار بدهد اگ درست پیش روید برای وزیر 5 یا 6 دیگر جایی پیدا نمی کند در آن صورت باید به وزیر قبلی برگردد و خانه بعدی حرکت آن را پیدا کند اگر توانست خانه ای پیدا کند در آن صورت دوباره به وزیر بعدی برود و به دنبال حرکت برای آن باشد اگر توانست کارش را ادامه بدهد اگر نتوانست دوباره به حرکت بعدی برگردد اگر نتوانست برای آن نیز حرکت دیگری پیدا کند دوباره به حرکت قبل از آن برگردد و همین کار را تا زمانی ادامه بدهد که بتواند وزیر 8ام را جا گذاری کند .اگر برنامه را درست کد کرده باشید این برنامه با این الگریتم قادر به پیدا کردن 92 حالت مختلف برای جا گذاری 8وزیر خواهد شد.امیدوارم موفق به کد کردن درست آن شوید ::نوشتن:: :موفق:

sara_m
سه شنبه 10 خرداد 1384, 09:12 صبح
مرسی :موفق:

titbasoft
سه شنبه 10 خرداد 1384, 10:32 صبح
توی این مساله مهم اینه که وزیر اول رو کاربر بتونه روی صفحه هر جا دلش خواست بزاره. در غیر این صورت الگوریتم جناب مهدی الگوریتم خوبیه. البته میشه تغیرش داد!

Developer Programmer
سه شنبه 10 خرداد 1384, 11:33 صبح
روش تپه نوردی (hill climbing) رو هم ببینید :flower:

مهدی
پنج شنبه 19 خرداد 1384, 23:21 عصر
من خودم با ژنتیک و SA نوشتم و SA عالی ترین روش بود. (البته بعد از greedy :sunglass: )
حتی برای 1000 وزیر تونستم زیر 1 دقیقه جواب بگیرم با SA! اما با ژنتیک از 100 وزیر بیشتر تعریفی نداشت. تپه نوردی هم فکر نمیکنم خوب جواب بده! البته اگر کسی کدش رو نوشته خبرشو بده چطور بود :موفق:

hamed jalili
شنبه 21 خرداد 1384, 01:06 صبح
میشه بفرمایین تپه نوردی یا ژنتیک یا sa یا ... چیه؟
:گیج:

مهدی
شنبه 21 خرداد 1384, 13:51 عصر
SA = Simulated Anealing یا شبیه سازی حرارتی

ضمنا این 3 تا از الگوریتم های هوش مصنوعی هستند که کارایی های فوق العاده دارند اما مثل خیلی از راه حل های دیگه هوش مصنوعی جواب قطعی ممکنه ندهند! مثلا همین sa که گفتم در یک بار اجرا ممکنه بد کار کنه و جواب نده و در بار دیگه اجرا ممکنه عالی کار کنه و زود به جواب برسه.

hamed jalili
یک شنبه 22 خرداد 1384, 01:01 صبح
خیلی ممنون از راهنمایی تون
متاسفانه من هنوز این درسو ور نداشتم احتمالا ترم بعد بدن

مرضی6711
شنبه 10 آبان 1393, 18:07 عصر
میشه فایل سورس و آموزش حل مسئله 8 وزیر با استفاده از الگوریتم SA رو قراربدید؟ ممنون میشم

sa1378
شنبه 10 آبان 1393, 18:20 عصر
میشه فایل سورس و آموزش حل مسئله 8 وزیر با استفاده از الگوریتم SA رو قراربدید؟ ممنون میشم

اینجا یه چیزای خوبی هست:
http://artificial.ir/intelligence/thread619.html