سلام
کسی حل مسئله n وزیر با روش backtracking را برای حالتیکه n=4 است را داره؟؟؟؟؟؟؟؟؟؟؟؟؟
سلام
کسی حل مسئله n وزیر با روش backtracking را برای حالتیکه n=4 است را داره؟؟؟؟؟؟؟؟؟؟؟؟؟
مسئله n وزیر همه جوابهای ممکن را چاپ کند و در آخر تعداد آنها را چاپ کند با استفاده از الگوریت جستجوی فضای حالاترا هم بلدی؟
صورت مسئله : هشت وزير را در هشت خانه شطرنج (8*8) طوري قرار دهيد كه هيچكدام يكديگر را تهديد نكنند. وزير در خانه هاي شطرنج به صورت عرضي،طولي و قطري مي تواند حركت كند. اين مسئله قابل تعميم به مسئله N وزير در يك شطرنج N*N است.
تاريخچه: اين مسئله در سالي 1848 توسط شطرنج بازي به نام Max Bezzel عنوان شد و رياضي دانان بسياري ازجمله Gauss و Georg Cantor بر روي اين مسئله كار كرده و در نهايت آنرا به N وزير تعميم دادند. اولين راه حل توسط Franz Nauck در سال 1850 ارائه شد كه به همان مسئله N وزير تعميم داده شد. پس از آن Gunther راه حلي با استفاده از دترمينان ارائه داد كه J.W.L. Glaisher آنرا كامل نمود.
در سال 1979 ، 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 حالت قابل تبديل است.
To follow the path:
Look to the master
Follow the master
Walk with the master
See through the master
Become the master
اقاي مدير بخش من اين الگريتم شما را انجام دادم اما به نتيجه اي نرسيدم
لطفا بيشتر توضيح بدهيد
با عرض سلام و خسته نباشید
عید غدیر رو تبریک میگم به همه شما دوستان عزیز
یک سوال راجع به مسئله n وزیر؟
چجوری این مسئله رو با الگوریتم ژنتیک میشه حل کرد؟
کاربر جدید
سلام. ببخشید برنامه hill climbing را دانلود کردم .حالا چه جوری باید اجراش کنم ؟؟؟
بسیا عالی بود
اما فکر کنم یک سری مطالب رو حذف کردید چون با این الگوریتم به جواب نرسیدیم .البته من خودم این برنامه رو نوشتم
با سلام .من برنامه 9 وزیر را میخواهم کسی میتونه کمک ام کنه یعنی خانه های جدول 9*9 می شوند.مرسی
کاربر دائمی
سلام به طور اتفاقی دیدم درباره ان وزیر بحث میکنید گشتم و سورکدشو که خیلی وقت پیش از طریق 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;
}
آخرین ویرایش به وسیله whitehat : شنبه 12 اردیبهشت 1388 در 14:55 عصر دلیل: از تگ کد برای کدهایتان استفاده کنید
سلام آقا جلیل
اگه امکانش هست این برنامه که آپلود کردید رو سورسش هم تو سایت برامون بزارید
تشکر
سلام دستتون درد نکنه
من تازه عضو این سایت شدم
.
الان حسرت می خورم که چرا زودتر این اتفاق نیفتاده بود
خدا خیرتون بده
3نمره ی ++c رو می گیرم
فدای همتون
دوست عزیز به کد زیر دقت کن :
#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();
}
موفق باشی
سلام 3 حالت مختلف حل الگوريتم n وزير با توضيح و الگوريتمش ميخوام به صورت مقاله باشه
آخرین ویرایش به وسیله Reyhane7 : جمعه 17 اردیبهشت 1389 در 19:07 عصر
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");
}
}
آخرین ویرایش به وسیله MIDOSE : چهارشنبه 04 آذر 1388 در 16:50 عصر
این برنامه ی NQueen که n رو از کاربر می خواد و بعدش تمام جوابهای موجود رو چاپ میکنه
https://barnamenevis.org/attach...1&d=1259154994
با TC بازش کن Ctrl+F9 رو بزن حالشو ببر
سلام می شه راهنماییم کنین از چه روشی برای حل 8 وزیر استفاده کنیم بهتره؟؟؟؟
مثلا برای مسئله پازل 8 روش جستجوی A* زود به جواب می رسونه.برای 8 وزیر چه روشی بهتره؟؟؟؟؟؟؟؟
ممنون
اگر به دست آوردن تمام جواب ها مورد نظر هستش راهی غیر از backtrack وجود نداره.
اما اگر به دست آوردن فقط یه جواب مورد نظر هستش راه حل O(n) l هم وجود داره.
کسی نمی خواد راهنمااییم کنه که از چه روشی برای حل این مسئله استفاده کنم؟؟؟؟؟؟من نمونه برنامه نمی خوام اگه می شه در مورد الگوریتم های حل این مسئله راهنماییم کنین می خوام خودمو تو زمینه ی برنامه نوییسی تقویت کنم.لطفا راهنماییم کنین.
ايني كه ميگن o(n) منظور پيچيدگي زماني الگوريتم هست.و نوعي الگوريتم يا اسم الگوريتم خاصي نيست.
مسئله n وزير راه حلهاي زيادي داره اگه به كتاب هوش مصنوعي رامين رهنمون مراجعه كني چندتا از اونا را با توضيحات پيدا مي كني
موفق باشي
البته تمام جواب ها را از راه حل غير از backtrack هم ميشه پيدا كرد. مثلا جستجوي اول سطح bfs
کاربر جدید
کاربر جدید
صورت مساله
http://4tmu.ir/forum/index.php?topic=3410.0
و
http://www.pcpedia.ir/ViewArticle.aspx?ID=80
ولی کاشکی بسشتر راجب نهوه حلش بحث می شد
/********************
* 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******************"<<en dl<<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();
}
با سلام
دوستان کسی میتونه مسئله 8 وزیر رو به 8 "رخ" تغییر بده... در واقع میخواهم تمامی حالت هایی که 8 رخ در صفحه شطرنج قرار میگیرند و همدیگر رو نزنند رو بدونم که بتونم مقادیر ارزش خانه هایی که رخ دارند رو برگردونم...
با سلام و خسته نباشید من الگوریتم 8وزیر روش کلاسیک و ژنتیک و با توضیحات در نرم افزار مطلب میخوام
سلام دوستان
می خواستم بدونم کسی می تونه مساله 8 وزیر رو به وسیله DFS برام پیاده سازی کنه و یه مقدار توضیح بده؟؟
با تشکر
خسته نباشید دوستان
من می خواستم مسئله 8 وزیر را به وسیله dfs پیاده سازی کنم کمک می خواستم؟ لطفا راهنمایی کنید
با تشکر
سلام
دوستان می خواستم پیاده سازی 8 وزیر را با dfs برام توضیح بدین؟
با سپاس
سلام دوستان
نیاز ب کمک فوری دارم
من الگوریتم 8 وزیر به زبان vb را به استاد ارائه دادم حالا بهونه کرده که باید سه تابع اصلی از برنامه رو واسم توضیح بدی و منم اصلا نمیدونم ازم چی میخواد
دوستان هرکس میدونه منظورش چیه لطفا کمک کنید شیش نمره داره
لینک : http://artificial.ir/intelligence/at...-queentest-rar
التماس دعا..
سلام
من الگوریتمو تو متلب میخوام
خیلی زود
خواهش میکنم کمک کنید
با سلام
من یه الگوریتم n وزیر نوشتم که پیچیدگی زمانی n^4 داره من میتونم این الگوریتم رو به مقاله ISI تبدیل کنم
با سلام
من یه الگوریتم n وزیر نوشتم که پیچیدگی زمانی n^4 داره من میتونم این الگوریتم رو به مقاله ISI تبدیل کنم ؟
من خیلی نمیام این جا میتونین جوابتونو به ahmadkarami73@gmail.com بفرستین ؟
من حتی پیچیدگی فروشنده دوره گرد رو هم کاهش دادم این رو هم میخواستم ببینممیتونم به مقاله ISI تبدیل کنم ؟ahmadkarami73@gmail.com
اگه میتونین جوابتونو بهبفرستین
ممنونم