n-Queen 모델 능~
¶
8bit == 1byte 는 만 는 . 만 는 n-Queen 들 index 는 배 능 방. 를 믿는데.. 빨봤 마 르.--;
는.. ¶
recursive-call 는 들. 문 는 부 backtrack 는 부.
린 ¶
call . loop 돌면 번 대 get_Queen()를 . 는 get_Queen(0,0); 럼 는 는데..--;
source code ¶
~cpp #include <iostream.h> #define QUEEN 8 int Queen[QUEEN][QUEEN]={0}; int total=0; void print_result(); void reset(int fromline=0); void get_Queen(int x, int y); int check(int i, int j); int main() { for(int i=0; i<QUEEN; i++) { reset(); get_Queen(i,0); } return 0; } void get_Queen(int x, int y) { reset(y+1); Queen[x][y]=1; if(y==QUEEN-1) print_result(); for(int i=0; i<QUEEN; i++) if(check(i,y+1)) get_Queen(i,y+1); Queen[x][y]=0; } void print_result() { int i,j; for(i=0; i<QUEEN; i++) { for(j=0; j<QUEEN; j++) cout << Queen[j][i] << " "; cout << endl; } cin.get(); } void reset(int fromline) { int i,j; for(i=0; i<QUEEN; i++) for(j=fromline; j<QUEEN; j++) Queen[i][j]=0; } int check(int i, int j) { if(i<0 || j<0 || i>=QUEEN || j>=QUEEN) return 0; int x, y, sum=0; for(y=j-1; y>=0 && sum==0; y--) /* */ sum+=Queen[i][y]; for(x=i-1; x>=0 && sum==0; x--) /* */ sum+=Queen[x][j]; for(x=i-1, y=j-1; x>=0 && y>=0 && sum==0; x--, y--) /* 대 */ sum+=Queen[x][y]; for(x=i+1, y=j-1; x<QUEEN && y>=0 && sum==0; x++, y--) /* 대 */ sum+=Queen[x][y]; return (int)(sum==0); }