PDA

View Full Version : الگوریتم هشت وزیر



nilofar3586
شنبه 10 دی 1384, 08:28 صبح
سلام
کسی حل مسئله n وزیر با روش backtracking را برای حالتیکه n=4 است را داره؟؟؟؟؟؟؟؟؟؟؟؟؟

aidin300
یک شنبه 11 دی 1384, 09:00 صبح
سلام
برنامه + الگوریتم

saye263000
سه شنبه 01 فروردین 1385, 04:11 صبح
الگوریتم هشت وزیر چه جوریه؟

shobair
یک شنبه 27 فروردین 1385, 17:12 عصر
سلام
اگه از الگوریتم صحبت میکنیم دیگه زبان برنامه نویسی مطرح نیست. الگوریتم سختی نداره. می توانید از یک ماتریس 8 در 8 از اعداد استفاده کنید. مقدار اولیه همه رو صفر کنید. با قرار دادن هر وزیر در هر خانه ،خانه های هم طول و هم عرض و قطری آن را یک واحد اضافه کنید. بعد از 8 بار قرار دادن چک کنید که مقدار هیچ خانه ای از 1 بیشتر نباشد. در این صورت یک وضعیت مورد نظر پیش آمده
شبیر

hamed jalili
پنج شنبه 31 فروردین 1385, 12:40 عصر
دوستمون seyedof حق دارن این چندمین باره که این الگوریتم بحث میشه !

به هر حال

خانم مریم شفقتی

بله این مسئله 92 حالت داره (البته با درنظر گرفتن قرینه ها)
من یه الگوریتم بلدم که خیلی خیلی ساده هست ولی برای حالتهایی مثل 20 وزیر یا بیشتر بسیار کنده !

الگوریتم به این صورت :
در ردیف اول به دنبال یه خانه برای وزیر اول میگردید که خانه اول است بعد خانه هایی را که این وزیر میتواند مورد هدف قرار دهد را علامت گذاری میکنید سپس به دنباله اولین خانه برای وزیر دوم در ردیف دوم می گردید که تحدید نشود که خانه سوم است سپس خانه هایی را که این وزیر مورد هدف خود قرار میدهد را علامت گذاری می کنید سپس وزیر سوم و به همین ترتیب ادامه می دهید تا هیچ خانه ای برای وزیر شما پیدا نشود (اگه اشتباه نکنم در جای گذاری وزیر 6 یا 5 م این اتفاق میافتد ) در این زمان شما یک وزیر به عقب بر میگردید (یعنی اگه برای وزیر مثلا 6 جایی پیدا نکردید بر می گردید به وزیر 5 ام ) اگه خاطرتون باشه شما وزیر را در اولین خانه که پیدا می کردید قرار میدادید ، حالا شما باید خانه بعد را که امکان قرار گرفتن این وزیر هست رو انتخاب میکنید و میروید به وزیر بعدی اگه جایی بود که خوب وزیر رو قرار میدهید و ادامه میدهید اگه نبود دوباره به وزیر قبل برمیگردید و همین طور ادامه میدهید تا تمام حالات را باه شما بدهد

این روش ، روش صحیح و خطا ست که برای این حالت(8 وزیر) خیلی سریع عمل میکنه ولی برای حالته های دیگه مثل 20 وزیر کنده !



این هم برنامه این الگریتم که در ++C نوشتمش

این برنامه و بسیاری برنامه های دیگر برنامه هایی هستند که بهتر است خودتون بنویسید و یاد بگیرید وگرنه با یه جستجوی ساده در Google به راحتی میشه 100 ها الگوریتم و برنامه مختلف به زبان های مختلف پیدا کنید ؛ این در خواست کمک کنید برای راهنمایی نه در خواست کمک برای انجام تکالیفتون .

mohandese_hiclass
یک شنبه 03 اردیبهشت 1385, 17:17 عصر
سورس کدش تو لینک زیر هست
www.tafrihi.com/delphi

powerboy2988
جمعه 19 آبان 1385, 22:43 عصر
برنامه 8 وزیر در c


#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<complex.h>

#define TRUE 1
#define FALSE 0

unsigned int a,b,c,d,e,f,g,h;
void main(void)
{
unsigned char chk_crash(unsigned char,unsigned char,unsigned char);
void draw_puzzle(void);
clrscr();
for (a=1;a<=8;a++);
for (b=1;b<=8;b++);
if (chk_crash(a,b,1))
for (c=1;c<=8;c++)
if ((chk_crash(c,b,1)) && (chk_crash(c,a,2)))
for (d=1;d<=8;d++)
if ((chk_crash(d,c,1)) && (chk_crash(d,b,2)) && (chk_crash(d,a,3)))
for(e=1;e<=8;e++)
if ((chk_crash(e,d,1)) && (chk_crash(e,c,2)) && (chk_crash(e,b,3)) && (chk_crash(e,a,4)))
for (f=1;f<=8;f++)
if ((chk_crash(f,e,1)) && (chk_crash(f,d,2)) && (chk_crash(f,c,3)) && (chk_crash(f,b,4)) && (chk_crash(f,a,5)))
for (g=1;g<=8;g++)
if ((chk_crash(g,f,1)) && (chk_crash(g,e,2)) && (chk_crash(g,d,3)) && (chk_crash(g,c,4)) && (chk_crash(g,b,5)) && (chk_crash(g,a,6)))
for (h=1;h<=8;h++)
if ((chk_crash(h,g,1)) && (chk_crash(h,f,2)) && (chk_crash(h,e,3)) && (chk_crash(h,d,4)) && (chk_crash(h,c,5)) && (chk_crash(h,b,6)) && (chk_crash(h,a,7)))
{
draw_puzzle();
getch();
}
getch();
}
unsigned char chk_crash(unsigned char i,unsigned char j,unsigned char d)
{
if ((i==j) || (abs(i-j)==d))
return(FALSE);
else
return(TRUE);
}
void draw_puzzle(void)
{
unsigned char a1,b1,a2,b2,i,v;
clrscr();
for (a1=1;a1<=16;a1++)
for (b1=18;b<=65;b1++)
{
gotoxy(b1,a1+d);
a2=(a1-1)/2+1;
b2=(b1-18)/6+1;
if (((a2+b2)%2)==0)
textcolor(11);
else
textcolor(1);
cprintf("A\0");
for (i=0;i<8;i++)
{
switch(i)
{
case 0:{v=a;break;}
case 1:{v=b;break;}
case 2:{v=c;break;}
case 3:{v=d;break;}
case 4:{v=e;break;}
case 5:{v=f;break;}
case 6:{v=g;break;}
case 7:{v=h;break;}
}
gotoxy(15+6*v,5+i*2);
cprintf("*\0");
}
}
}

Goeezor
شنبه 14 اردیبهشت 1387, 07:10 صبح
تپه نوردی Hill Climbing Searching یکی از الگوریتم های هوش مصنوعی می باشد که برای مسائل پیچیده به کار میرود به گونه ای که بجای اینکه برای حل مسئله از کل گراف استفاده کند.به صورت اتفاقی از یک قسمت از گراف استفاده میکند.
این برنامه برای مثال هشت وزیر نوشته شده است.
http://www.speedyshare.com/940413615.html

aramis_paeez
یک شنبه 29 اردیبهشت 1387, 18:16 عصر
مسئله n وزیر همه جوابهای ممکن را چاپ کند و در آخر تعداد آنها را چاپ کند با استفاده از الگوریت جستجوی فضای حالاترا هم بلدی؟

whitehat
دوشنبه 30 اردیبهشت 1387, 11:59 صبح
صورت مسئله : هشت وزير را در هشت خانه شطرنج (8*8) طوري قرار دهيد كه هيچكدام يكديگر را تهديد نكنند. وزير در خانه هاي شطرنج به صورت عرضي،طولي و قطري مي تواند حركت كند. اين مسئله قابل تعميم به مسئله N وزير در يك شطرنج N*N است.

تاريخچه: اين مسئله در سالي 1848 توسط شطرنج بازي به نام Max Bezzel (http://en.wikipedia.org/wiki/Max_Bezzel) عنوان شد و رياضي دانان بسياري ازجمله Gauss (http://en.wikipedia.org/wiki/Carl_Friedrich_Gauss) و Georg Cantor (http://en.wikipedia.org/wiki/Georg_Cantor) بر روي اين مسئله كار كرده و در نهايت آنرا به N وزير تعميم دادند. اولين راه حل توسط Franz Nauck در سال 1850 ارائه شد كه به همان مسئله N وزير تعميم داده شد. پس از آن Gunther راه حلي با استفاده از دترمينان ارائه داد كه J.W.L. Glaisher (http://en.wikipedia.org/wiki/J.W.L._Glaisher) آنرا كامل نمود.
در سال 1979 ، Edsger Dijkstra (http://en.wikipedia.org/wiki/Edsger_Dijkstra) با استفاده از الگوريتم عقب گرد اول عمق اين مسئله را حل كرد.

راه حل: براي حل اين مسئله كه داراي 92 جواب است ، بايد تكنيكهايي جهت كاهش حالات ،روش Brute Force يا امتحان تك تك جواب ها انجام شود. تعداد همه حالاتي كه مي تواند در روش Brute Force چك شود برابر 16,777,216 يا هشت به توان هشت است!
يكي از روش هاي حل اين مسئله براي n>=4 يا n=1 استفاده از روش مكاشفه اي (heuristic) است:
1- عدد n را بر عدد 12 تقسيم كن و باقي مانده را يادداشت كن
2- به ترتيب اعداد زوج 2 تا n را در ليستي بنويس
3- اگر باقي مانده 3 يا 9 بود ، عدد 2 را به انتهاي ليست انتقال بده.
4- به ليست اعداد فرد 1 تا N را به ترتيب اضافه كن، اما اگر باقي مانده 8 بود اعداد را دو به دو باهم عوض كند (مثلا 1و3و5و7و9 تبديل به 3و1و7و5و9 ميشه)
5- اگر باقي مانده 2 بود جاي 1 و3 را با هم عوض كن و 5 را به انتهاي ليست ببر
6- اگر باقي مانده 3 يا 9 بود ، اعداد 1 و 3 را به انتهاي ليست ببر.
7- حال با استفاده از ليست بدست آمده وزير ها در صفحه شطرنج چيده مي شوند، بطوريكه جاي وزير ستون اول ،اولين عدد ليست ،جاي وزير ستون دوم ، دومين عدد ليست و ...
اين الگوريتم يك راه حل براي حل اين مسئله است، براي بدست آوردن همه حالات از روشهاي ديگري مي توان استفاده كرد.
روش حل مسئله 12 راه حل يكتا دارد كه با در نظر گيري تقارن و چرخش به 92 حالت قابل تبديل است.

khoie_commerce
پنج شنبه 26 دی 1387, 17:57 عصر
اقاي مدير بخش من اين الگريتم شما را انجام دادم اما به نتيجه اي نرسيدم
لطفا بيشتر توضيح بدهيد

en.kamali.ir
جمعه 27 دی 1387, 02:09 صبح
بسیا عالی بود
اما فکر کنم یک سری مطالب رو حذف کردید چون با این الگوریتم به جواب نرسیدیم .البته من خودم این برنامه رو نوشتم

Spiro1361
جمعه 18 بهمن 1387, 21:06 عصر
صورت مسئله : هشت وزير را در هشت خانه شطرنج (8*8) طوري قرار دهيد كه هيچكدام يكديگر را تهديد نكنند. وزير در خانه هاي شطرنج به صورت عرضي،طولي و قطري مي تواند حركت كند. اين مسئله قابل تعميم به مسئله N وزير در يك شطرنج N*N است.

تاريخچه: اين مسئله در سالي 1848 توسط شطرنج بازي به نام Max Bezzel (http://en.wikipedia.org/wiki/Max_Bezzel) عنوان شد و رياضي دانان بسياري ازجمله Gauss (http://en.wikipedia.org/wiki/Carl_Friedrich_Gauss) و Georg Cantor (http://en.wikipedia.org/wiki/Georg_Cantor) بر روي اين مسئله كار كرده و در نهايت آنرا به N وزير تعميم دادند. اولين راه حل توسط Franz Nauck در سال 1850 ارائه شد كه به همان مسئله N وزير تعميم داده شد. پس از آن Gunther راه حلي با استفاده از دترمينان ارائه داد كه J.W.L. Glaisher (http://en.wikipedia.org/wiki/J.W.L._Glaisher) آنرا كامل نمود.
در سال 1979 ، Edsger Dijkstra (http://en.wikipedia.org/wiki/Edsger_Dijkstra) با استفاده از الگوريتم عقب گرد اول عمق اين مسئله را حل كرد.

راه حل: براي حل اين مسئله كه داراي 92 جواب است ، بايد تكنيكهايي جهت كاهش حالات ،روش Brute Force يا امتحان تك تك جواب ها انجام شود. تعداد همه حالاتي كه مي تواند در روش Brute Force چك شود برابر 16,777,216 يا هشت به توان هشت است!
يكي از روش هاي حل اين مسئله براي n>=4 يا n=1 استفاده از روش مكاشفه اي (heuristic) است:
1- عدد n را بر عدد 12 تقسيم كن و باقي مانده را يادداشت كن
2- به ترتيب اعداد زوج 2 تا n را در ليستي بنويس
3- اگر باقي مانده 3 يا 9 بود ، عدد 2 را به انتهاي ليست انتقال بده.
4- به ليست اعداد فرد 1 تا N را به ترتيب اضافه كن، اما اگر باقي مانده 8 بود اعداد را دو به دو باهم عوض كند (مثلا 1و3و5و7و9 تبديل به 3و1و7و5و9 ميشه)
5- اگر باقي مانده 2 بود جاي 1 و3 را با هم عوض كن و 5 را به انتهاي ليست ببر
6- اگر باقي مانده 3 يا 9 بود ، اعداد 1 و 3 را به انتهاي ليست ببر.
7- حال با استفاده از ليست بدست آمده وزير ها در صفحه شطرنج چيده مي شوند، بطوريكه جاي وزير ستون اول ،اولين عدد ليست ،جاي وزير ستون دوم ، دومين عدد ليست و ...
اين الگوريتم يك راه حل براي حل اين مسئله است، براي بدست آوردن همه حالات از روشهاي ديگري مي توان استفاده كرد.
روش حل مسئله 12 راه حل يكتا دارد كه با در نظر گيري تقارن و چرخش به 92 حالت قابل تبديل است.
كسي از دوستان اين الگوريتم رو كد نكرده؟ (البته اصلا كار سختي نيست ولي من الان در موقعيتي هستم كه فرصت انجامش رو ندارم.)
مثلا به يكي از زبانهاي C , C++ , C# ... ؟
ممنون ميشم اگه تو همين يكي 2 روزه جواب بديد.

elnaz.r
پنج شنبه 27 فروردین 1388, 12:22 عصر
با سلام .من برنامه 9 وزیر را میخواهم کسی میتونه کمک ام کنه یعنی خانه های جدول 9*9 می شوند.مرسی

puacmparand
شنبه 12 اردیبهشت 1388, 00:28 صبح
سلام به طور اتفاقی دیدم درباره ان وزیر بحث میکنید گشتم و سورکدشو که خیلی وقت پیش از طریق backtaracking حل کرده بودم پیدا کردم اینم سورسش




// in the name of god
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int q[8];
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
string str;
int i;
bool check;
while(getline(cin,str))
{
check=0;
stringstream inp(str);
for(int t=0;t<8;t++)
inp>>q[t];
for(int ind=1;ind<8;ind++)
{
i=1;
while(i<=ind)
{
if(q[ind]-i == q[ind-i] || q[ind]+i == q[ind-i] || q[ind] == q[ind-i])
{
check=1;
goto end;
}
i++;
}
}
end:
if(check==0)
cout<<str<<endl;

}
return 0;
}

mamalim
پنج شنبه 31 اردیبهشت 1388, 01:49 صبح
سلام دستتون درد نکنه
من تازه عضو این سایت شدم
.
الان حسرت می خورم که چرا زودتر این اتفاق نیفتاده بود
خدا خیرتون بده
3نمره ی ++c رو می گیرم
فدای همتون

kashaneh
دوشنبه 04 خرداد 1388, 14:05 عصر
دوست عزیز به کد زیر دقت کن :


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

int *col,n, count=0;

bool promising(int);

void queens(int i)
{
int j;
if(promising(i))
if (i==n){
for(int index=1;index<=n;index++)
cout<<col[index]<<" ";
cout<<endl;
count++;
}
else
for(j=1;j<=n;j++)
{
col[i+1] = j;
queens(i+1) ;
}
}

bool promising(int i)
{
int k;
bool myswitch;
k=1;
myswitch = true;
while (k<i && myswitch)
{
if(col[i]==col[k]||abs(col[i]-col[k])==(i-k))
myswitch = false;
k++;
}
return myswitch;
}

void main()
{
clrscr();
cout<<"Enter Number Of Queens : ";
cin>>n;
col=new int[n];
queens(0);
cout<<"\nNumber Of Result : "<<count;
getch();
}

موفق باشی

dhugdzahra
سه شنبه 19 آبان 1388, 09:47 صبح
سلام 3 حالت مختلف حل الگوريتم n وزير با توضيح و الگوريتمش ميخوام به صورت مقاله باشه :متفکر:

Reyhane7
سه شنبه 19 آبان 1388, 10:34 صبح
حل مسئله هشت وزير (http://artificial.ir/intelligence/thread619.html)(8Queen) (http://artificial.ir/intelligence/thread619.html)با روش‌هاي مختلف! (http://artificial.ir/intelligence/thread619.html)

(http://artificial.ir/intelligence/%C3%99%C2%87%C3%99%C2%88%C3%98%C2%B4-%C3%99%C2%85%C3%98%C2%B5%C3%99%C2%86%C3%99%C2%88%C 3%98%C2%B9%C3%9B%C2%8C-%C3%9A%C2%86%C3%9B%C2%8C%C3%98%C2%B3%C3%98%C2%AA%C 3%98%C2%9F/619-%C3%98%C2%AD%C3%99%C2%84-%C3%99%C2%85%C3%98%C2%B3%C3%98%C2%A6%C3%99%C2%84%C 3%99%C2%87-8-%C3%99%C2%88%C3%98%C2%B2%C3%99%C2%8A%C3%98%C2%B1-%C3%98%C2%A8%C3%98%C2%A7-%C3%98%C2%B1%C3%99%C2%88%C3%98%C2%B4-%C3%99%C2%87%C3%98%C2%A7%C3%99%C2%8A-%C3%99%C2%85%C3%98%C2%AE%C3%98%C2%AA%C3%99%C2%84%C 3%99%C2%81.html)

معصومه ارفعی
چهارشنبه 20 آبان 1388, 15:34 عصر
include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<complex.h>

#define TRUE 1
#define FALSE 0

unsigned int a,b,c,d,e,f,g,h;
void main(void)
{
unsigned char chk_crash(unsigned char,unsigned char,unsigned char);
void draw_puzzle(void);
clrscr();
for (a=1;a<=8;a++);
for (b=1;b<=8;b++);
if (chk_crash(a,b,1))
for (c=1;c<=8;C++‎‎)
if ((chk_crash(c,b,1)) && (chk_crash(c,a,2)))
for (d=1;d<=8;d++)
if ((chk_crash(d,c,1)) && (chk_crash(d,b,2)) && (chk_crash(d,a,3)))
for(e=1;e<=8;e++)
if ((chk_crash(e,d,1)) && (chk_crash(e,c,2)) && (chk_crash(e,b,3)) && (chk_crash(e,a,4)))
for (f=1;f<=8;f++)
if ((chk_crash(f,e,1)) && (chk_crash(f,d,2)) && (chk_crash(f,c,3)) && (chk_crash(f,b,4)) && (chk_crash(f,a,5)))
for (g=1;g<=8;g++)
if ((chk_crash(g,f,1)) && (chk_crash(g,e,2)) && (chk_crash(g,d,3)) && (chk_crash(g,c,4)) && (chk_crash(g,b,5)) && (chk_crash(g,a,6)))
for (h=1;h<=8;h++)
if ((chk_crash(h,g,1)) && (chk_crash(h,f,2)) && (chk_crash(h,e,3)) && (chk_crash(h,d,4)) && (chk_crash(h,c,5)) && (chk_crash(h,b,6)) && (chk_crash(h,a,7)))
{
draw_puzzle();
getch();
}
getch();
}
unsigned char chk_crash(unsigned char i,unsigned char j,unsigned char d)
{
if ((i==j) || (abs(i-j)==d))
return(FALSE);
else
return(TRUE);
}
void draw_puzzle(void)
{
unsigned char a1,b1,a2,b2,i,v;
clrscr();
for (a1=1;a1<=16;a1++)
for (b1=18;b<=65;b1++)
{
gotoxy(b1,a1+d);
a2=(a1-1)/2+1;
b2=(b1-18)/6+1;
if (((a2+b2)%2)==0)
textcolor(11);
else
textcolor(1);
cprintf("A\0");
for (i=0;i<8;i++)
{
switch(i)
{
case 0:{v=a;break;}
case 1:{v=b;break;}
case 2:{v=c;break;}
case 3:{v=d;break;}
case 4:{v=e;break;}
case 5:{v=f;break;}
case 6:{v=g;break;}
case 7:{v=h;break;}
}
gotoxy(15+6*v,5+i*2);
cprintf("*\0");
}
}
}

aminipour
چهارشنبه 04 آذر 1388, 16:27 عصر
این برنامه ی NQueen که n رو از کاربر می خواد و بعدش تمام جوابهای موجود رو چاپ میکنه
http://barnamenevis.org/forum/attachment.php?attachmentid=40306&stc=1&d=1259154994
با TC بازش کن Ctrl+F9 رو بزن حالشو ببر

sarakh
سه شنبه 22 تیر 1389, 17:06 عصر
سلام می شه راهنماییم کنین از چه روشی برای حل 8 وزیر استفاده کنیم بهتره؟؟؟؟
مثلا برای مسئله پازل 8 روش جستجوی A* زود به جواب می رسونه.برای 8 وزیر چه روشی بهتره؟؟؟؟؟؟؟؟
ممنون

qwerty11
سه شنبه 22 تیر 1389, 19:18 عصر
اگر به دست آوردن تمام جواب ها مورد نظر هستش راهی غیر از backtrack وجود نداره.

اما اگر به دست آوردن فقط یه جواب مورد نظر هستش راه حل O(n) l هم وجود داره.

sarakh
سه شنبه 22 تیر 1389, 23:10 عصر
اگر به دست آوردن تمام جواب ها مورد نظر هستش راهی غیر از backtrack وجود نداره.

اما اگر به دست آوردن فقط یه جواب مورد نظر هستش راه حل O(n) l هم وجود داره.


این راه حل که می گین o(n) چی هست؟چه جوریه؟؟؟؟ممنون می شم اگه در موردش توضیح بدین.

sarakh
پنج شنبه 24 تیر 1389, 23:21 عصر
کسی نمی خواد راهنمااییم کنه که از چه روشی برای حل این مسئله استفاده کنم؟؟؟؟؟؟من نمونه برنامه نمی خوام اگه می شه در مورد الگوریتم های حل این مسئله راهنماییم کنین می خوام خودمو تو زمینه ی برنامه نوییسی تقویت کنم.لطفا راهنماییم کنین.

afi_program
چهارشنبه 06 مرداد 1389, 02:31 صبح
ايني كه ميگن o(n) منظور پيچيدگي زماني الگوريتم هست.و نوعي الگوريتم يا اسم الگوريتم خاصي نيست.
مسئله n وزير راه حلهاي زيادي داره اگه به كتاب هوش مصنوعي رامين رهنمون مراجعه كني چندتا از اونا را با توضيحات پيدا مي كني
موفق باشي

afi_program
چهارشنبه 06 مرداد 1389, 02:32 صبح
البته تمام جواب ها را از راه حل غير از backtrack هم ميشه پيدا كرد. مثلا جستجوي اول سطح bfs

firststep
یک شنبه 23 آبان 1389, 23:34 عصر
صورت مساله
http://4tmu.ir/forum/index.php?topic=3410.0
و
http://www.pcpedia.ir/ViewArticle.aspx?ID=80

ولی کاشکی بسشتر راجب نهوه حلش بحث می شد:افسرده::ناراحت:

mansoure1989
سه شنبه 24 آبان 1390, 00:55 صبح
با عرض سلام و خسته نباشید
عید غدیر رو تبریک میگم به همه شما دوستان عزیز
یک سوال راجع به مسئله n وزیر؟
چجوری این مسئله رو با الگوریتم ژنتیک میشه حل کرد؟

حسن رضازاده
شنبه 28 آبان 1390, 19:42 عصر
/********************
* Eghit Queen *
* By: *
* Hassan Rezazadeh *
* *
********************/
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>

const int m=20;
int k[m][m];
int Count=0;
int v=8 , n=8 , i=0 , j=0 , state=0,z,y;

void remove(int i,int j)
{
clrscr();
int p,q;
k[i][j]=0;
Count--;
for(p=0;p<n;p++)
if(p!=i)
k[p][j]--;
for(p=0;p<n;p++)
if(p!=j)
k[i][p]--;
p=i+1;
q=j+1;
while(p<n && q<n)
{
k[p++][q++]--;
}
p=i-1;
q=j-1;
while(p>=0 && q>=0)
{
k[p--][q--]--;
}
p=i+1;
q=j-1;
while(p<n && q>=0)
{
k[p++][q--]--;
}
p=i-1;
q=j+1;
while(p>=0 && q<n)
{
k[p--][q++]--;
}
}

void apply(int i,int j)
{
int p,q;
k[i][j]=1;
Count++;
for(p=0;p<n;p++)
if(p!=i)
k[p][j]++;
for(p=0;p<n;p++)
if(p!=j)
k[i][p]++;
p=i+1;
q=j+1;
while(p<n && q<n)
{
k[p++][q++]++;
}
p=i-1;
q=j-1;
while(p>=0 && q>=0)
{
k[p--][q--]++;
}
p=i+1;
q=j-1;
while(p<n && q>=0)
{
k[p++][q--]++;
}
p=i-1;
q=j+1;
while(p>=0 && q<n)
{
k[p--][q++]++;
}

}

void draw()
{
clrscr();
for(int p=0;p<n;p++)
{
for(int q=0;q<n;q++)
{
if(k[p][q]!=1)
cout<<setw(3)<<" "<<'.';
else
{
cout<<setw(3)<<" "<<'X';

}
cout<<" ("<<q+1<<"-"<<p+1<<")";


}
cout<<endl<<endl;
}

cout<<endl<<endl<<" Total states founded for "<<n<<"*"<<n<<" boards and "<<v<<" Queens: "<<state<<endl;
}

void check()
{
if(Count==v)
{
state++;
draw();
cout<<endl<<endl<<" Press Esc to exit or press Enter to continue...";
cout<<"\n\n\n By: Hassan Rezazadeh";
start:
int c=getch();
if(c==27)exit(0);
if(c!=13) goto start;
}
}

void move(int p,int q)
{
apply(p,q);
check();
for(int i=p;i<n;i++)
{
for(int j=0;j<n;j++)
if(k[i][j]==0)
move(i,j);
}
remove(p,q);
}

void main()
{
cout<<"**************Queens******************"<<endl<<endl;
clrscr();
draw();
for(i=0;i<n;i++)
for(j=0;j<n;j++)
move(i,j);

clrscr();
cout<<" Total states:"<<state<<endl;
gotoxy(35,25);
textcolor(2);
cout<<"By: Hassan Rezazadeh\n\n"<<"\n\n\n THE END";
delay(100);
getch();

}

majid.nasirinejad
شنبه 03 دی 1390, 20:17 عصر
با سلام
دوستان کسی میتونه مسئله 8 وزیر رو به 8 "رخ" تغییر بده... در واقع میخواهم تمامی حالت هایی که 8 رخ در صفحه شطرنج قرار میگیرند و همدیگر رو نزنند رو بدونم که بتونم مقادیر ارزش خانه هایی که رخ دارند رو برگردونم...

avestta
پنج شنبه 14 اردیبهشت 1391, 15:14 عصر
سلام. ببخشید برنامه hill climbing را دانلود کردم .حالا چه جوری باید اجراش کنم ؟؟؟

saba1049
سه شنبه 30 آبان 1391, 09:26 صبح
با سلام و خسته نباشید من الگوریتم 8وزیر روش کلاسیک و ژنتیک و با توضیحات در نرم افزار مطلب میخوام

reza4344
یک شنبه 01 اردیبهشت 1392, 19:35 عصر
سلام دوستان

می خواستم بدونم کسی می تونه مساله 8 وزیر رو به وسیله DFS برام پیاده سازی کنه و یه مقدار توضیح بده؟؟

با تشکر

reza4344
یک شنبه 08 اردیبهشت 1392, 16:48 عصر
خسته نباشید دوستان

من می خواستم مسئله 8 وزیر را به وسیله dfs پیاده سازی کنم کمک می خواستم؟ لطفا راهنمایی کنید
با تشکر

reza4344
یک شنبه 08 اردیبهشت 1392, 16:54 عصر
سلام

دوستان می خواستم پیاده سازی 8 وزیر را با dfs برام توضیح بدین؟
با سپاس

reza123654
سه شنبه 14 خرداد 1392, 19:07 عصر
سلام دوستان
نیاز ب کمک فوری دارم
من الگوریتم 8 وزیر به زبان vb را به استاد ارائه دادم حالا بهونه کرده که باید سه تابع اصلی از برنامه رو واسم توضیح بدی و منم اصلا نمیدونم ازم چی میخواد
دوستان هرکس میدونه منظورش چیه لطفا کمک کنید شیش نمره داره
لینک : http://artificial.ir/intelligence/attachments/1613d1263927559-queentest-rar
التماس دعا..

hos.babaei
جمعه 22 آذر 1392, 20:52 عصر
سلام آقا جلیل
اگه امکانش هست این برنامه که آپلود کردید رو سورسش هم تو سایت برامون بزارید
تشکر

sahar-93
جمعه 02 خرداد 1393, 14:03 عصر
برنامه 8 وزیر در c


#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<complex.h>

#define TRUE 1
#define FALSE 0

unsigned int a,b,c,d,e,f,g,h;
void main(void)
{
unsigned char chk_crash(unsigned char,unsigned char,unsigned char);
void draw_puzzle(void);
clrscr();
for (a=1;a<=8;a++);
for (b=1;b<=8;b++);
if (chk_crash(a,b,1))
for (c=1;c<=8;C++‎)
if ((chk_crash(c,b,1)) && (chk_crash(c,a,2)))
for (d=1;d<=8;d++)
if ((chk_crash(d,c,1)) && (chk_crash(d,b,2)) && (chk_crash(d,a,3)))
for(e=1;e<=8;e++)
if ((chk_crash(e,d,1)) && (chk_crash(e,c,2)) && (chk_crash(e,b,3)) && (chk_crash(e,a,4)))
for (f=1;f<=8;f++)
if ((chk_crash(f,e,1)) && (chk_crash(f,d,2)) && (chk_crash(f,c,3)) && (chk_crash(f,b,4)) && (chk_crash(f,a,5)))
for (g=1;g<=8;g++)
if ((chk_crash(g,f,1)) && (chk_crash(g,e,2)) && (chk_crash(g,d,3)) && (chk_crash(g,c,4)) && (chk_crash(g,b,5)) && (chk_crash(g,a,6)))
for (h=1;h<=8;h++)
if ((chk_crash(h,g,1)) && (chk_crash(h,f,2)) && (chk_crash(h,e,3)) && (chk_crash(h,d,4)) && (chk_crash(h,c,5)) && (chk_crash(h,b,6)) && (chk_crash(h,a,7)))
{
draw_puzzle();
getch();
}
getch();
}
unsigned char chk_crash(unsigned char i,unsigned char j,unsigned char d)
{
if ((i==j) || (abs(i-j)==d))
return(FALSE);
else
return(TRUE);
}
void draw_puzzle(void)
{
unsigned char a1,b1,a2,b2,i,v;
clrscr();
for (a1=1;a1<=16;a1++)
for (b1=18;b<=65;b1++)
{
gotoxy(b1,a1+d);
a2=(a1-1)/2+1;
b2=(b1-18)/6+1;
if (((a2+b2)%2)==0)
textcolor(11);
else
textcolor(1);
cprintf("A\0");
for (i=0;i<8;i++)
{
switch(i)
{
case 0:{v=a;break;}
case 1:{v=b;break;}
case 2:{v=c;break;}
case 3:{v=d;break;}
case 4:{v=e;break;}
case 5:{v=f;break;}
case 6:{v=g;break;}
case 7:{v=h;break;}
}
gotoxy(15+6*v,5+i*2);
cprintf("*\0");
}
}
}



میشه ی توضیح در مورد دستورا بدید
ممنون میشم

samin Fs
جمعه 09 خرداد 1393, 18:59 عصر
سلام
من الگوریتمو تو متلب میخوام
خیلی زود
خواهش میکنم کمک کنید

karami_ahmad
پنج شنبه 18 دی 1393, 16:16 عصر
با سلام
من یه الگوریتم n وزیر نوشتم که پیچیدگی زمانی n^4 داره من میتونم این الگوریتم رو به مقاله ISI تبدیل کنم

karami_ahmad
پنج شنبه 18 دی 1393, 16:18 عصر
با سلام
من یه الگوریتم n وزیر نوشتم که پیچیدگی زمانی n^4 داره من میتونم این الگوریتم رو به مقاله ISI تبدیل کنم ؟
من خیلی نمیام این جا میتونین جوابتونو به ahmadkarami73@gmail.com بفرستین ؟

karami_ahmad
پنج شنبه 18 دی 1393, 16:21 عصر
من حتی پیچیدگی فروشنده دوره گرد رو هم کاهش دادم این رو هم میخواستم ببینم
میتونم به مقاله ISI تبدیل کنم ؟
اگه میتونین جوابتونو به ahmadkarami73@gmail.com
بفرستین
ممنونم

Fatemenorozi555
پنج شنبه 16 اردیبهشت 1395, 06:16 صبح
سلام....من سرس کدc# هشت وزیر با الگوریتم تپه نوردی رو میخوام
اگ بتونید کمکم کنید ممنونتون میشم

negarmozafari@yahoo.com
دوشنبه 28 خرداد 1397, 22:32 عصر
سلام
مدل سازی مساله 8وزیررو میخواستم
ممنون میشم اگه کمکم کنید

mxsadegh
چهارشنبه 14 شهریور 1397, 19:44 عصر
با GO نوشتم که تمام حالات رو هم حساب میکنه و هم نمایش میده

https://github.com/mxsadegh/projecteuler/blob/master/n_queens.go

Pedram77
یک شنبه 08 مهر 1397, 14:53 عصر
مقاله من درمورد حل این مسئله :
Solve "N-Queen" problem by Genetic Algorithm (https://www.linkedin.com/pulse/solve-n-queen-problem-genetic-algorithm-pedram-dehghanpour/)