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