12604.c
unknown
css
2 years ago
1.5 kB
7
Indexable
//12604 - N-Queens M-Rooks Problem #include <stdio.h> #include <stdlib.h> #include <string.h> int N, M, cnt=0; void queen(int *c,int *slash, int *bslash, int *ans, int i); int main(){ while(scanf("%d %d", &N, &M) != EOF){ int c[105]={0}, slash[105]={0}, bslash[105]={0}; int ans[105]={0}; cnt = 0; queen(c,slash,bslash,ans,0); printf("%d\n", cnt); } } void queen(int *c,int *slash, int *bslash, int *ans, int i){ if(i >= N+M){ /*印出來 for(int ii = 0; ii < N+M; ii++){ for(int jj = 0; jj < N+M; jj++){ if(ans[ii]-100 == jj) printf("R"); else if(ans[ii] == jj) printf("Q"); else printf("0"); } printf("\n"); } printf("\n\n"); */ cnt++; } else{ for(int j=0; j<N+M; j++){ //前N項放queen, 後M項放boot if(j<N){ if(c[j] || slash[i+j] || bslash[j-i+N+M]) continue; ans[i] = j; c[j] = slash[i+j] = bslash[j-i+N+M] = 1; queen(c,slash,bslash,ans,i+1); c[j] = slash[i+j] = bslash[j-i+N+M] = 0; } else{ if(c[j]) continue; ans[i] = j+1000; c[j] = slash[i+j] = bslash[j-i+N+M] = 1; queen(c,slash,bslash,ans,i+1); c[j] = slash[i+j] = bslash[j-i+N+M] = 0; } } } }
Editor is loading...