واضح آرشیو وب فارسی:سایت ریسک: View Full Version : مسئله n وزیر mo.mo22-05-2009, 12:39 PMسلام دوستان. من دنبال الگریتم مسئله n وزیر میگردم. چون به نظر من پیچیده میاد دنبال یه توضیح ویه کدساده از این برنامه میگردم تا بتونم خودم بنویسمش. در ضمن باید به روش عقبگرد هم باشه. فاطـمه22-05-2009, 04:32 PMسلام این کد برای 8وزیره http://read.pudn.com/downloads74/sourcecode/math/265429/BackTrack/Backtrack.cpp__.htm و این: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! فاطـمه22-05-2009, 04:37 PMاین سایتم جالبه: http://www.codeproject.com/KB/cpp/8Queen_Problem.aspx mo.mo23-05-2009, 11:25 AMاز کمکتون ممنون. ولی میشه این کد رو با vcpp هم قرار بدین. farshidshd24-05-2009, 09:21 PMسلام این کد وزیر ها رو سطر به سطر جا به جا میکنه واسه اینکه بخوایم ستون به ستون تست کنه چی کار باد کنیم؟؟؟ فاطـمه25-05-2009, 11:50 AMسلام این کد وزیر ها رو سطر به سطر جا به جا میکنه واسه اینکه بخوایم ستون به ستون تست کنه چی کار باد کنیم؟؟؟ سلام منظورتون چیه؟ ما تو مسئله nوزیر توی هر سطر تنها می تونیم یه وزیر داشته باشیم پس فقط اونا رو تو ستونا جابه جا می کنیم:20: mo.mo25-05-2009, 11:59 AMکدی که شما نوشتین توش با کلاس ها کار شده ولی من دنبال یه کد با روش عقب گرد میگردم که هم ساده تر باشه و هم منم بتونم یه چیزلیی لزش بفهمم. ممنون. farshidshd25-05-2009, 09:10 PMسلام منظورتون چیه؟ ما تو مسئله nوزیر توی هر سطر تنها می تونیم یه وزیر داشته باشیم پس فقط اونا رو تو ستونا جابه جا می کنیم:20: وزیر ها سطر به سطر جا به جا میشن من میخوام ستون به ستون تست کنه و جابه جا کنه یعنی به جای اینکه توی سطر یه وزیر داشته باشیم توی ستون یه وزیر باشه فقط فاطـمه27-05-2009, 10:58 AMسلام اینم یکم ساده تر !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! farshidshd27-05-2009, 11:12 AM#include <stdio.h> intis_safe(int rows[8], int x, int y) { int i; for (i=1; i <= y; ++i) { if (rows[y-i] == x || rows[y-i] == x-i || rows[y-i] == x+i) return 0; } return 1;} voidputboard(int rows[8]) { static int s = 0; int x, y; printf(" Solution #%d: --------------------------------- ", ++s); for (y=0; y < 8; ++y) { for (x=0; x < 8; ++x) printf(x == rows[y] ? "| Q " : "| "); printf("| --------------------------------- "); }} voideight_queens_helper(int rows[8], int y){ int x; for (x=0; x < 8; ++x) { if (is_safe(rows, x, y)) { rows[y] = x; if (y == 7) putboard(rows); else eight_queens_helper(rows, y+1); } }} intmain(){ int rows[8]; eight_queens_helper(rows, 0); return 0;} این چیه فاطمه؟؟×!! فاطـمه27-05-2009, 11:33 AMچرا این جوری شده؟! !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! farshidshd28-05-2009, 11:34 AMاین الان ستونی جا به جا میکنه؟؟؟ این کد رو خودت دادی بهم اجراش کن متوجه میشی که سطری جا به جا میکنه من میخوام همین ستونی جابه جا بشه یعنی تو هر ستون یه وزیر که همدیگر رو گارد نکنه... !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! فاطـمه31-05-2009, 07:10 PMخب نهایتا جای I, j عوض می شه تو آرایه چه لزومی داره این کار رو بکنید؟ farshidshd31-05-2009, 08:29 PMخب نهایتا جای I, j عوض می شه تو آرایه چه لزومی داره این کار رو بکنید؟ استاد خواسته بود ممنونم درستش کردم محمد پاكدل19-06-2009, 05:09 PMin proje 8 vazer baray fatemeh and farshid //gives a start home adress & cheks if 8 vazir could be placed by that start home. #include<iostream.h> #include<conio.h> void place(int,int,int [][8],int [][8]); void print(int,int,int [][8],int [][8]); int main( ) { clrscr( ); int const k=8; int p[k][k]; int placed[k][k]; int a,b; for(a=1;a<=8;a++) {for(b=1;b<=8;b++) {p[a][b]=1; placed[a][b]=0; } } for(a=1;a<=8;a++) { for(b=1;b<=8;b++) { place(a,b,p,placed); print(a,b,p,placed); } } getch( ); return(0); } void place(int i,int j,int p[][8],int placed[][8]) { placed[i][j]=1; int a,b,k; for(k=1;k<=8;k++) { p[i][k]=0; p[k][j]=0; if(k+i<=8 && k+j<=8) {p[k+i][k+j]=0;} if(k+i<=8 && j-k>=1) {p[k+i][j-k]=0;} if(i-k>=1 && k+j<=8) {p[i-k][k+j]=0;} if(i-k>=1 && j-k>=1) {p[i-k][j-k]=0;} } for(a=1;a<=8;a++) { for(b=1;b<=8;b++) { if(p[a][b]==1) place(a,b,p,placed); } } } void print(int i,int j,int p[][8],int placed[][8]) { int a,b; int c=0; for(a=1;a<=8;a++) {for(b=1;b<=8;b++) {if(placed[a][b]==0) cout<<"_"; if(placed[a][b]==1) { c++; cout<<"v"; } }cout<<" "; } if(c!=8)cout<<"could not place all 8 vazir" <<"for the start home("<<i<<","<<j <<")!press any key to continue: "; if(c==8) {cout<<"****all 8 vazir placed with starthome("<<i<<"," <<j<<")!**** "; } for(a=1;a<=8;a++) { for(b=1;b<=8;b++) { p[a][b]=1; placed[a][b]=0; } } getch( ); } محمد پاكدل19-06-2009, 05:14 PMage on moshkel dareh pas az in poroje estefadeh koned #include <iostream.h> #include <conio.h> #include <_defs.h> int board[8][8]={0}; int value[8][8]={ {2,3,4,4,4,4,3,2}, {3,4,6,6,6,6,4,3}, {4,6,8,8,8,8,6,4}, {4,6,8,8,8,8,6,4}, {4,6,8,8,8,8,6,4}, {4,6,8,8,8,8,6,4}, {3,4,6,6,6,6,4,3}, {2,3,4,4,4,4,3,2}}; int row[8]= {-2,-2,-1,1,2,2,1,-1}; int col[]={-1 , 1 , 2 , 2 , 1 , -1 , -2 , -2 }; int satr,soton,count=0,min=8; //************************************************** *** void getfirstvalue(); void print(); void changevalue(); int move(); //************************************************** *** int main() { getfirstvalue(); ++count; print(); while(move()) { getch(); ++count; print(); } getch(); return 0; } //************************************************** *** void getfirstvalue() { cout<<"enter the satr and soton for start : "; do{ cout<<"enter satr : "; cin>>satr; }while(satr > 8 || satr < 1); do{ cout<<"enter soton : "; cin>>soton; }while(soton > 8 || soton < 1); board[(satr-1)][(soton-1)]=1; value[satr-1][soton-1]=0; changevalue(); } //************************************************** *** void print() { int i,j; cout<<"satr : "<<satr<<" soton"<<soton<<" "; for(i=0;i<8;i++){ for(j=0;j<8;j++){ cout<<" "<<board[i][j]<<" "; } cout<<" "; } cout<<"------------------------------------------------- "; for(i=0;i<8;i++){ for(j=0;j<8;j++) cout<<" "<<value[i][j]<<" "; cout<<" "; } } //************************************************** *** void changevalue() { int number,x[8],y[8]; for(number = 0; number < 8 ; number++){ x[number] = satr + row[number]; y[number] = soton + col[number]; if(x[number] > 0 && x[number] <= 8 && y[number] > 0 && y[number] <= 8 && board[(x[number]-1)][(y[number]-1)] != 1 ) value[x[number]-1][y[number]-1]--; } } //************************************************** *** int move() { int i,x[8],y[8],z,t; min=8; for(i=0;i<8;i++){ if(row[i]<-2) row[i]+=1; x[i]=satr+row[i]; y[i]=soton+col[i]; if( x[i] > 0 && x[i] <= 8 && y[i] > 0 && y[i] <= 8 && board[x[i]-1][y[i]-1] != 1) if(value[x[i]-1][y[i]-1] <=min){ min=value[x[i]-1][y[i]-1]; z=x[i],t=y[i]; } } if(min > 7 || min < -1) return 0; if(z > 8 || z <= 0 || t > 8 || t <= 0 || board[z-1][t-1]) return 0; satr=z; soton=t; board[z-1][t-1]=1; value[z-1][t-1]=0; changevalue(); return 1; } mehazirak22-06-2009, 03:33 PMسلام من تابع اون رو توی c# نوشتم ب !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! bozgoord22-11-2009, 11:23 AMکدوم یکی ابتدایی تره و میشه به Nوزیر تبدیلش کرد سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 2120]