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); }